遞歸展開

不要在產品/板配置 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 的評估。如果將變量設置為昂貴函數調用的結果,則該函數只會通過簡單擴展調用一次,但可能會通過遞歸擴展調用多次。