0

だから、これは奇妙です。私のmakefileには

CC:=icc
ifeq ($(CC),icc)
CFLAGS := $(ICCFLAGS)
LIBS := $(LIBS) -openmp
else
CFLAGS := $(GCCFLAGS)
LIBS := $(LIBS) -fopenmp
endif

makeの場合、条件はfalseですが

CCC:=icc
ifeq ($(CCC),icc)
CFLAGS := $(ICCFLAGS)
LIBS := $(LIBS) -openmp
else
CFLAGS := $(GCCFLAGS)
LIBS := $(LIBS) -fopenmp
endif

ここで条件は真であり、

CC:=icc
CCC:=$(CC)
ifeq ($(CCC),icc)
CFLAGS := $(ICCFLAGS)
LIBS := $(LIBS) -openmp
else
CFLAGS := $(GCCFLAGS)
LIBS := $(LIBS) -fopenmp
endif

ここでも条件は偽です。一体何が起こっているのですか?

4

1 に答える 1

1

CC次のようなコマンドラインオプションとして渡されているようです。

make CC=...

...またはmakewithswitchを呼び出すと-e、環境変数がMakefileで定義されたものよりも優先されます。

origin関数を使用して、変数がどのように定義されているかを確認できます。

CC := icc
$(error CC comes from $(origin CC))

これがcommand lineまたはを出力する場合、解決策はディレクティブenvironment overrideを使用することです:override

override CC := icc

これによりCC、コマンドラインまたは環境から別の変数が存在する場合でも変数が設定されます。

于 2012-03-30T10:42:07.273 に答える