質問

私は宣言を持っているCプログラムのためのメイクファイルを持っています

CC?=gcc

に変更します

CC?=g++

G ++でコンパイルすることはありません。に変更します

CC=g++

G ++を使用します。

だから私は?=オペレーターが何をするのだろうか?私の推測では、使用するコンパイラを決定し、設定されていない場合はGCCを使用する環境変数を見ていますか?これをクリアできる人はいますか?

役に立ちましたか?

解決

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

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

 FOO ?= bar

これとまったく同じです(原点関数を参照):

 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

他の人が述べたように、それはおそらくすでに事前に定義されています。

GNUでは、と定義されているものを見ることができます make -p aを含むディレクトリから Makefile.

これは、次のように文書化されています。 https://www.gnu.org/software/make/manual/html_node/implicit-variables.html

いつもの、 CC=cc デフォルトで。その後、Ubuntu 14.04で例えば、 cc 通常、シンブリンクです gcc.

すべての変数を一度に無効にするには、次のことを参照してください。 make builtinルールと変数をmake fileの内側から無効にする 現在不可能だと思われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top