Makeでの変数の割り当てについては、:=および=演算子を参照してください。それらの違いは何ですか?
7
Makefile変数割り当ての
—
eldarerathis
Makeでの変数の割り当てについては、:=および=演算子を参照してください。それらの違いは何ですか?
回答:
これは、GNU Makeのドキュメントの6.2 The Variables of Variablesの セクションで説明されています。
つまり、で定義され:=
た変数は1回展開されますが、で定義された変数=
は使用されるたびに展開されます。
make
のメインジョブ)は、このような内部変数の解決よりもオーバーヘッドがはるかに大きいため、これは問題ではありません。
:=
単純な割り当て式は、最初に発生したときに1回だけ評価されます。たとえばCC :=${GCC} ${FLAGS}
、最初の出会いの間に評価されるとgcc -W
、${CC}
発生するたびにに置き換えられgcc -W
ます。
=
再帰的な割り当て式は、コード内で変数が検出されるたびに評価されます。たとえば、likeステートメントは、like CC = ${GCC} {FLAGS}
アクション${CC} file.c
が実行されたときにのみ評価されます。変数があればしかし、GCC
すなわち再割り当てされ
GCC=c++
、その後${CC}
に変換されますc++ -W
再割り当て後。
?=
条件付き代入は、値がない場合にのみ変数に値を割り当てます
+=
仮定しCC = gcc
、その後追加オペレータが同じように使用されCC += -w
、その後CC
、今の値を持ちますgcc -W
http://www.gnu.org/software/make/manual/make.html#Flavorsから:
=
再帰的に展開される変数を定義します。 :=
単純に展開された変数を定義します。