Makefile: $ (CC) не работает с ifeq - PullRequest
0 голосов
/ 30 марта 2012

Итак, это странно. В моем make-файле у меня есть

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

здесь условие снова ложно. Что, черт возьми, происходит?

1 Ответ

1 голос
/ 30 марта 2012

Похоже, вы либо передаете CC в качестве параметра командной строки, например:

make CC=...

..., либо вызываете make с ключом -e, который заставляет переменные среды иметь приоритетсверх тех, которые определены в Makefile.

Вы можете использовать origin function , чтобы проверить, как переменная была определена:

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

Если это печатает command lineили environment override, тогда решение состоит в том, чтобы использовать директиву override :

override CC := icc

Это установит переменную CC, даже если есть другая из командной строки или среды.

...