再帰展開

プロダクト構成やボード構成の 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 の評価にかかる時間を短縮できます。変数が高コストな関数呼び出しの結果に設定されている場合、単純な展開では呼び出しは 1 回のみですが、再帰展開では何度も呼び出される可能性があります。