cc?= makefileではどういう意味ですか?
質問
私は宣言を持っている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の内側から無効にする 現在不可能だと思われます。