شامل و ارث بردن عبارات در Starlark

در 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 نیز ایده آل خواهد بود.