0

所以,这很奇怪。在我的makefile中我有

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

对于 make,条件为假,但

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=...

... 或使用-eswitch 调用 make,这会强制环境变量优先于 Makefile 中定义的变量。

您可以使用origin函数来检查变量是如何定义的:

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

如果这打印command lineor environment override,那么解决方案是使用override指令

override CC := icc

CC即使命令行或环境中存在另一个变量,这也会设置变量。

于 2012-03-30T10:42:07.273 回答