התרחבות רקורסיבית

אל תשתמש בהרחבה רקורסיבית בקבצי makefile של מוצר/לוח. הרחבה רקורסיבית היא השימוש ב-raw = במקום := עבור הקצאת משתנה ב-makefiles. זה גורם למשתנים המוגדרים לערך של משתנים אחרים לא להעריך את אותם משתנים אחרים עד שהם עצמם יוערכו. זוהי פונקציונליות ש-Starlark לא תומכת בה.

הסרתו תלויה במידה רבה בתרחיש הספציפי של אופן השימוש בו. רוב הזמן זה כרוך בהעברת הקצאות משתנות לפני המקום שבו הם משמשים. לדוגמה, החלף:

MY_VAR_2 = foo
# Some stuff in between...
MY_VAR = $(MY_VAR_2)
MY_VAR_2 = bar
# $(MY_VAR) is bar here.

עם:

MY_VAR_2 := foo
# Some stuff in between...
MY_VAR_2 := bar
MY_VAR := $(MY_VAR_2)
# $(MY_VAR) is bar here.

הוספה למשתנה עם += משתמשת בהרחבה רקורסיבית אם המשתנה הזה לא הוקצה עם הרחבה פשוטה בעבר. אם אינך בטוח אם המשתנה הוקצה בעבר, ניתן להחליף את ה += ב- MY_VAR := $(strip $(MY_VAR) new_value) .

הסרת הרחבה דחיית יכולה גם להאיץ את ההערכה של ה-Makefiles עוד לפני שההמרה ל-Starlark מתבצעת. אם משתנים היו מוגדרים לתוצאה של קריאות פונקציה יקרות, הפונקציה הייתה נקראת רק פעם אחת עם הרחבה פשוטה, אך פוטנציאלית פעמים רבות עם הרחבה רקורסיבית.