28

次の宣言を持つ C プログラムの Makefile があります。

CC?=gcc

それをに変更する

CC?=g++

g++ でコンパイルしません。それをに変更する

CC=g++

g ++を使用します。

では、?= 演算子は何をするのだろうか? 私の推測では、環境変数を調べて使用するコンパイラを決定し、設定されていない場合は gcc を使用しますか? これをクリアできる人いますか?

4

4 に答える 4

37

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

変数の別の代入演算子 `?=' があります。これは、変数がまだ定義されていない場合にのみ効果があるため、条件付き変数代入演算子と呼ばれます。この文:

 FOO ?= bar

はこれとまったく同じです (origin 関数を参照してください):

 ifeq ($(origin FOO), undefined)
   FOO = bar
 endif

おそらくCC既に として定義されているgccためCC ?= g++、既存の をオーバーライドしません gcc

于 2010-06-03T12:26:16.420 に答える
5

オペレーターは、?=まだ設定されていない場合にのみ変数を設定します: info make* Using Variables* Setting

于 2010-06-03T12:25:37.047 に答える
2

「?」演算子は、まだ設定されていない場合は設定を意味します。

したがって、CC が既に空白の場合、CC?= で設定されます。CC に既に何かが含まれている場合は、含まれません。

ソース: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html

于 2010-06-03T12:27:19.367 に答える