递归扩展

请勿在产品/开发板配置 Makefile 中使用递归扩展。递归扩展是指在 Makefile 中使用原始 =(而不是 :=)来为变量赋值。这会导致已设为其他变量的值的变量在自身受评估之前,无法评估那些其他变量。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)

移除延迟扩展也可以加快对 Makefile 的评估,即使在转换到 Starlark 的作业完成之前也可以。如果变量已设为高开销函数调用的结果,则通过简单扩展只能调用该函数一次,但通过递归扩展或许能调用该函数多次。