2

У меня есть сборочный файл GNU. Он отлично работает на Linux, Solaris и OS X. Однако под Cygwin-32, Cygwin-64 и MinGW он производит:

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo 2.0.4(0.287/5/3) | egrep -i -c "fc22.i686"'

Нет линии 0; и тест для Fedora 22 фактически происходит в строке 73:

IS_FEDORA22_i686 = $(shell echo $(RELEASE) | $(EGREP) -i -c "fc22.i686")

Что происходит с Cygwin и MinGW? Что еще более важно, как я могу это исправить?


Я знаю, это звучит как натяжка, так что вот снимок экрана. Верхний левый - MinGW. Центр Cygwin-32. Внизу справа - Cygwin-64.

1 ответ1

2

Проблема в том, что оболочка видит скобки в $RELEASE вне любых кавычек, поэтому пытается их интерпретировать. Две вещи, которые нужно попробовать: поместить двойные кавычки вокруг ссылки на $(RELEASE) и использовать := за это. Например:

SHELL:=/bin/bash.  #at the top of the makefile
IS_FEDORA22_i686 := $(shell echo "$(RELEASE)" | $(EGREP) -i -c "fc22.i686")

Редактировать: вывод uname с ключами вроде -m обычно не имеет метасимволов оболочки. Та же самая проблема могла произойти с любой переменной, которая сделала. Вот почему полезно установить SHELL в вашем make-файле - если пользователь запускает csh , у вас будут другие проблемы, чем с bash .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .