所以,这很奇怪。在我的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
这里的条件再次为假。到底发生了什么事?
看起来您要么将CC
作为命令行选项传递,比如:
make CC=...
或者使用-e
开关调用make,强制环境变量优先于Makefile中定义的环境变量。
您可以使用origin
函数来检查变量是如何定义的:
CC := icc
$(error CC comes from $(origin CC))
如果打印command line
或environment override
,则解决方案是使用override
指令:
override CC := icc
这将设置CC
变量,即使命令行或环境中还有其他变量。