Expansion récursive

N'utilisez pas d'expansion récursive dans les makefiles de configuration de produit/carte. L'expansion récursive est l'utilisation d'un raw = au lieu d'un := pour l'affectation de variables dans les makefiles. Cela fait en sorte que les variables qui sont définies sur la valeur d'autres variables n'évaluent pas ces autres variables jusqu'à ce qu'elles soient elles-mêmes évaluées. C'est une fonctionnalité que Starlark ne prend pas en charge.

La suppression dépend en grande partie du scénario spécifique de son utilisation. La plupart du temps, cela implique de déplacer les affectations de variables avant où elles sont utilisées. Par exemple, remplacez :

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

avec:

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

L'ajout à une variable avec += utilise une expansion récursive si cette variable n'a pas été affectée à une expansion simple auparavant. Si vous n'êtes pas sûr que la variable ait été affectée auparavant, le += peut être remplacé par MY_VAR := $(strip $(MY_VAR) new_value) .

La suppression de l'expansion différée peut également accélérer l'évaluation des Makefiles avant même que la conversion en Starlark ne soit effectuée. Si les variables étaient définies sur le résultat d'appels de fonction coûteux, la fonction ne serait appelée qu'une seule fois avec une expansion simple, mais potentiellement plusieurs fois avec une expansion récursive.