Проверьте, не возвращает ли команда ничего в Makefile - PullRequest
0 голосов
/ 29 декабря 2018

Для библиотеки C мне нужно проверить, используется ли текущий компилятор для x86_64 из-за проблем с памятью.Команда, которую я нашел, точно соответствует моему требованию:

CXXARCH:=$(${CXX} -dumpmachine | grep -i 'x86_64')

, где ${CXX} равно gcc или clang.Для машины x86_64 это вернет непустую строку.Для 32-битной машины, скажем Raspberry Pi, это будет пусто.

как я могу различить два случая?

Я сделал это:

ifneq (${CXXARCH},)
MAGICVAR:=-DMY_DEFINE
endif

С отпечатком $(info) я гарантировал, что в Raspberry Pi это условие не выполняется, что должно, потому что команда clang-6.0 -dumpmachine возвращает: armv7l-unknown-linux-gnueabihf.Так почему же это условие не выполняется?Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Предполагая систему POSIX, передайте результаты через wc -l:

CXXARCH:=$(shell $(CXX) -dumpmachine | grep -i 'x86_64' | wc -l)

Если результат равен нулю, в нем было ноль строк с x86_64.Это легче обрабатывать в make-файле, чем строковое значение.

(включая исправления для получения синтаксиса оболочки)

0 голосов
/ 29 декабря 2018

Синтаксис

$(${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) делает не , расширяется до пустой строки, то ..."

...