Сделать ошибку для ifeq: синтаксическая ошибка около неожиданного токена
Я пишу Makefile, который выполняет сопоставление строк в одном месте, код похож:
if test ...; \
then \
shell scripts... \
fi
ifeq ($(DIST_TYPE),nightly)
shell scripts ...
endif
Здесь первая if
- оболочка script, вторая ifeq
- это GNU Make conditional. Однако следующая ошибка генерирует:
ifeq (ночной, ночной)
/bin/sh: -c: строка 0: синтаксическая ошибка около неожиданного токена `nightly, nightly '
/bin/sh: -c: строка 0: `ifeq (ночной, ночной) '
Что здесь происходит? Кажется, что Make пытается вызвать оболочку.
Спасибо.
Ответы
Ответ 1
Я играл вокруг кода и обнаружил, что условные операторы должны быть написаны без отступа, и это решило мою проблему.
Если нет отступа, Make будет рассматривать его как директиву для себя; в противном случае он рассматривается как оболочка script.
Пример кода
Неправильно:
target:
ifeq (foo, bar)
...
endif
Правильно:
target:
ifeq (foo, bar)
...
endif
Ответ 2
Кроме того, если условные операторы используются в функциях определения, например:
define myFunc
ifeq (foo, bar)
...
endif
enddef
В этом случае Make также будет рассматривать его как оболочку script.
Эта проблема может быть решена с помощью if-функции:
define myFunc
$(if condition,then-part[,else-part])
enddef