遞歸擴展

不要在產品/板配置 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)

即使在轉換為 Starlark 之前,刪除延遲擴展也可以加快 Makefile 的評估速度。如果變量被設置為昂貴的函數調用的結果,則該函數將僅通過簡單擴展被調用一次,但通過遞歸擴展可能會被調用多次。