Makefile: $(CC) 不适用于 ifeq



所以,这很奇怪。在我的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 lineenvironment override,则解决方案是使用override指令:

override CC := icc

这将设置CC变量,即使命令行或环境中还有其他变量。

相关内容

  • 没有找到相关文章

最新更新