אל תשתמש בהרחבה רקורסיבית בקבצי 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 מתבצעת. אם משתנים היו מוגדרים לתוצאה של קריאות פונקציה יקרות, הפונקציה הייתה נקראת רק פעם אחת עם הרחבה פשוטה, אך פוטנציאלית פעמים רבות עם הרחבה רקורסיבית.