次の宣言を持つ C プログラムの Makefile があります。
CC?=gcc
それをに変更する
CC?=g++
g++ でコンパイルしません。それをに変更する
CC=g++
g ++を使用します。
では、?= 演算子は何をするのだろうか? 私の推測では、環境変数を調べて使用するコンパイラを決定し、設定されていない場合は gcc を使用しますか? これをクリアできる人いますか?
http://www.gnu.org/software/make/manual/make.htmlから:
変数の別の代入演算子 `?=' があります。これは、変数がまだ定義されていない場合にのみ効果があるため、条件付き変数代入演算子と呼ばれます。この文:
FOO ?= bar
はこれとまったく同じです (origin 関数を参照してください):
ifeq ($(origin FOO), undefined) FOO = bar endif
おそらくCC
既に として定義されているgcc
ためCC ?= g++
、既存の をオーバーライドしません gcc
。
オペレーターは、?=
まだ設定されていない場合にのみ変数を設定します: info make
→ * Using Variables
→ * Setting
。
「?」演算子は、まだ設定されていない場合は設定を意味します。
したがって、CC が既に空白の場合、CC?= で設定されます。CC に既に何かが含まれている場合は、含まれません。
ソース: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html