web-dev-qa-db-ja.com

Makefileの:=と=の違いは何ですか?

Makeでの変数の割り当てについては、:=および=演算子を参照してください。それらの違いは何ですか?

74
prosseek

これについては、GNU Makeドキュメントの 6.2 The Two Flavors of Variables というタイトルのセクションで説明されています。

つまり、:=で定義された変数は一度展開されますが、=で定義された変数は使用されるたびに展開されます。

59
Greg Hewgill

単純な割り当て(:=)

単純な代入式は、最初の出現時に一度だけ評価されます。たとえば、最初の出会いでCC :=${GCC} ${FLAGS}gcc -Wと評価された場合、${CC}が発生するたびにgcc -Wに置き換えられます。

再帰的な割り当て(=)

再帰的な代入式は、コード内で変数が検出されるたびに評価されます。たとえば、CC = ${GCC} {FLAGS}などのステートメントは、${CC} file.cなどのアクションが実行されたときにのみ評価されます。ただし、変数GCCが再割り当てされる場合、つまりGCC=c++の場合、${CC}は再割り当て後にc++ -Wに変換されます。

条件付き割り当て(?=)

条件付き割り当ては、値がない場合にのみ変数に値を割り当てます

追加(+ =)

CC = gccと仮定すると、CC += -wのように追加演算子が使用されます
その後、CCの値はgcc -Wになります

詳細については、これらをご覧ください tutorials

37
Amjad

http://www.gnu.org/software/make/manual/make.html#Flavors から:

=は、再帰的に展開される変数を定義します。 :=は、単純に展開される変数を定義します。

11