Rozwinięcie rekurencyjne

Nie używaj rekursywnego rozwijania w makefile konfiguracji produktu/płytki. Rozwinięcie rekurencyjne to użycie raw = zamiast := do przypisania zmiennych w plikach makefile. Powoduje, że zmienne, które są ustawione na wartość innych zmiennych, nie oceniają tych innych zmiennych, dopóki same nie zostaną ocenione. Jest to funkcja, której Starlark nie obsługuje.

Usunięcie go w dużej mierze zależy od konkretnego scenariusza użycia. W większości przypadków wiąże się to z przeniesieniem przypisań zmiennych tam, gdzie są one używane. Na przykład wymień:

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

z:

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

Dołączanie do zmiennej za pomocą += używa interpretacji rekurencyjnej, jeśli ta zmienna nie została wcześniej przypisana do prostej interpretacji. Jeśli nie masz pewności, czy zmienna została wcześniej przypisana, znak += można zastąpić przez MY_VAR := $(strip $(MY_VAR) new_value) .

Usunięcie odroczonego rozszerzenia może również przyspieszyć ocenę plików Makefile jeszcze przed zakończeniem konwersji do Starlark. Gdyby zmienne były ustawione na wynik kosztownych wywołań funkcji, funkcja byłaby wywoływana tylko raz z prostym rozwinięciem, ale potencjalnie wiele razy z rozwinięciem rekurencyjnym.