【问题标题】:Makefile: $(CC) isn't working with ifeqMakefile: $(CC) 不适用于 ifeq
【发布时间】:2012-04-13 21:53:06
【问题描述】:

所以,这很奇怪。在我的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

这里的条件再次为假。到底是怎么回事?

【问题讨论】:

  • 尝试将$(info CC is $(CC)) 放在makefile 的不同位置(例如,在最顶部,就在CC := icc 之前,就在之后 CC := icc)。这将使我们更好地了解问题所在。

标签: makefile gnu-make cc


【解决方案1】:

您似乎将CC 作为命令行选项传递,例如:

make CC=...

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

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

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

如果打印出command lineenvironment override,那么解决方案是使用override directive

override CC := icc

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

【讨论】:

  • 它说 *** CC 来自文件。停止。
  • 好吧,使用 override 解决了这个问题,但我不明白 CC 在哪里更改
猜你喜欢
  • 2011-12-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多