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