宣言のある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
他の人が述べたように、それはおそらくすでに事前定義されています。
GNUでは、Makefile
を含まないディレクトリから、make -p
で何が定義されているかを確認できます。
これは次の場所に記載されています: https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
通常、デフォルトではCC=cc
です。次に、Ubuntu 14.04などでは、cc
は通常gcc
へのシンボリックリンクです。
すべての変数を一度に無効にするには、次を参照してください: make組み込みルールと変数をmakeファイル内から無効にします 現在は不可能と思われます。