Makefile ifeq проблема - PullRequest
       26

Makefile ifeq проблема

7 голосов
/ 19 апреля 2011

Я пытаюсь использовать ifeq в своем шаблоне правил, и у меня есть проблемы с ним. Это правило, с которым у меня проблемы:

$(OBJS): $(OBJDIR)/%.o : ../%.c
    @mkdir -p $(dir $@)
    ifeq(mcc.exe,$(CC))
        o_file:=$(shell echo $@ | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/')
        $(CC) $(CFLAGS) $< -o $(o_file)
    else
        $(CC) $(CFLAGS) $< -o $@
    endif

Когда я запускаю это, я получаю:

"/bin/sh: -c: line 0: syntax error near unexpected token `mcc.exe,mcc.exe'
/bin/sh: -c: line 0: `ifeq(mcc.exe,mcc.exe)'"

Но, когда я не использую отступ, я получаю: «Makefile: 77: * отсутствует разделитель. Стоп».

Я использую GNU make 3.81 на Cygwin. Вся проблема с ifeq связана с тем, что у меня есть один Makefile для двух наборов инструментов, и один из них (mcc.exe) не может справиться с путями /cygdrive/c/.../something, но вместо этого должен быть c: /.../ что-то путь. Если вы знаете какой-либо другой способ обойти это, я был бы также очень благодарен!

Заранее спасибо!

1 Ответ

12 голосов
/ 19 апреля 2011

Строки, содержащие ifeq..., else и endif, не должны начинаться с табуляции. Если они это делают, они рассматриваются как часть рецепта и отправляются в оболочку; это приводит к синтаксической ошибке, которую вы получаете из / bin / sh; см. руководство по изготовлению для примера.

Я не совсем уверен, почему вы получаете ошибку, если вы не используете отступы. Возможно, вы не можете определить переменную в таком рецепте?

Редактировать: Я вижу, вы нашли ответ. Таким образом, без отступа и пробела между ifeq и круглыми скобками.

...