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


回答:


76

これは、GNU Makeのドキュメントの6.2 The Variables of Variablesの セクションで説明されています。

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


4
それで:=の方が効率的だと言って間違いないでしょうか?それとも、Makefileの効率は実際には要因ではありませんか?
Ungeheuer 2017

3
@Ungeheuerプロセスの呼び出し(makeのメインジョブ)は、このような内部変数の解決よりもオーバーヘッドがはるかに大きいため、これは問題ではありません。
Kirill Bulygin

62

簡単な割り当て :=

単純な割り当て式は、最初に発生したときに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

詳細については、これらのチュートリアルをチェックしてください


「単純な代入式は、最初に1回だけ評価されます」:明確にするために、展開/評価は、変数が最初に使用されたときではなく、定義されたときに行われます。
Michael Burr

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.