再帰的拡張

product / board configmakefilesで再帰的展開を使用しないでください。再帰的拡張とは、makefileでの変数の割り当てに:=の代わりにraw =を使用することです。これにより、他の変数の値に設定された変数は、それら自体が評価されるまで、それらの他の変数を評価しません。これは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の評価を高速化できます。変数が高価な関数呼び出しの結果に設定されている場合、関数は単純な展開では1回だけ呼び出されますが、再帰的な展開では何度も呼び出される可能性があります。