در make، یک عبارت include
میتواند شامل مسیرهای فایل با متغیرها باشد و در صورت داشتن پیشوند منهای، فایلهای موجود را نادیده میگیرد. معادل پیکربندی محصول تابع inherit-product-if-exists
است. Starlark از دستورات load
با فایلهایی استفاده میکند که با رشتههای واقعی شناسایی شدهاند، و اگر فایلی وجود نداشته باشد، Starlark خطا میدهد.
برای رفع این محدودیت، مبدل Starlark:
- تمام Makefiles را که می توانند با مسیری که شامل متغیرها است مطابقت داشته باشند را پیدا می کند
- بیانیه های
load
Starlark را برای همه آنها منتشر می کند - درست را در زمان اجرا انتخاب می کند
توجه داشته باشید که کد Starlark تولید شده ممکن است غیرطبیعی به نظر برسد زیرا تمام مسیرهای منطبق را فهرست می کند، حتی اگر تنها یکی از آنها اجرا شود.
توصیه میکنیم مراجع متغیر را در عبارت include
/ inherit-product
حذف کنید.
وقتی نمی توان از ارجاعات متغیر اجتناب کرد، سعی کنید قسمت متغیر را به حداقل برسانید. مثلا:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
باعث می شود مبدل یک دستور load
برای هر file.mk
در درخت منبع تولید کند، در حالی که
include path/to/$(TARGET_PRODUCT)/file.mk
آن را به فایل های file.mk
تحت path/to
محدود می کند. البته، حذف استفاده از TARGET_PRODUCT
نیز ایده آل خواهد بود.