Синтаксис
$(${CXX} -dumpmachine | grep -i 'x86_64')
- это shell синтаксис.Он не делает то, что вы хотите в Makefile
.Чтобы развернуть переменную CXX в Makefile , предпочтительным синтаксисом является использование $(CXX)
(хотя ${CXX}
тоже работает, но $CXX
не ).Для захвата вывода оболочки вам нужно использовать $(shell command)
.Таким образом
CXXARCH:=$(shell $(CXX) -dumpmachine | grep -i 'x86_64')
ifneq ($(CXXARCH),)
MAGICVAR:=-DMY_DEFINE
endif
Обратите внимание, что цель компилятора не имеет ничего общего с с "проблемами с памятью" в результирующей программе .Вы можете использовать x86_64-linux-gnu-gcc
для компиляции 32-битных программ (-m32) и получить «те же проблемы с памятью», что и с 32-битным компилятором.
Наконец убедитесь, что выне запутались ifneq
и ifeq
.
ifneq ($(CXXARCH),)
означает "если $(CXXARCH)
делает не , расширяется до пустой строки, то ..."