Подтвердить что ты не робот

Сделать ошибку для 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 пытается вызвать оболочку.

Спасибо.

4b9b3361

Ответ 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