ב-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
תהיה אידיאלית גם כן.