Использование Makefile:
ifeq ($(option), 1)
CC=gcc
@echo use gcc
else ifeq($(option), 2)
CC=clang
@echo use clang
else
CC=mipsel-linux-gcc
@echo use mipsel-linux-gcc
endif
#first target
foo:
echo CC $(CC)
я получаю следующее сообщение об ошибке:
$ make
Makefile:4: Extraneous text after `else' directive
Makefile:6: *** commands commence before first target. Stop.
Редактирование Makefile как на предложение от @MadScientist (т.е. пробел после ifeq
):
ifeq ($(option), 1)
CC=gcc
@echo use gcc
else ifeq ($(option), 2)
CC=clang
@echo use clang
else
CC=mipsel-linux-gcc
@echo use mipsel-linux-gcc
endif
#first target
foo:
echo CC $(CC)
я получаю:
$ make
Makefile:9: *** commands commence before first target. Stop.
Это означает, что нельзя использовать команду, если это не входит в правила. Если вы хотите что-то вроде этого журнала, попробуйте так:
ifeq ($(option), 1)
CC=gcc
else ifeq ($(option), 2)
CC=clang
else
CC=mipsel-linux-gcc
endif
$(info CC is $(CC))
#first target
foo:
@echo foo
От этого я получаю:
$ make
CC is mipsel-linux-gcc
foo
Смотрите https://www.gnu.org/software/make/manual/html_node/Make-Control-Functions.html#index-error для получения дополнительной информации о $(info ...)
- вы можете поместить его внутри условными, если это вы хотите, но почему бы вам? : ->
Я не понимаю, почему вы хотите «переписать» этот код. Есть ли проблема с этим? Если да, то в чем проблема? Я укажу на две вещи: во-первых, вам нужно пространство после 'ifeq' в' else ifeq ($ (опция), 2) '. Во-вторых, этот синтаксис был добавлен в GNU make в версии 3.81, поэтому, если у вас установлена более старая версия, она недоступна. – MadScientist
Я пропустил пробел после блоков 'ifeq' и' text-if-one-is-true', 'text-two-is-true',' text-if-one-and-two-are-false' содержат рецепты перед первой целью (они здесь не показаны). Эти две вещи делают мой Makefile неработоспособным. –
Извините, но я до сих пор не понимаю. Вам нужно _add_ пробел после 'ifeq', а не опустить его. При задании вопросов, пожалуйста, покажите минимальный пример проблемы _actual_, а не другой пример, который может не показать проблему. Также, пожалуйста, вырежьте и вставьте точное сообщение об ошибке, которое вы видите. В своем комментарии вы упоминаете «содержать рецепты перед первой целью», что является совершенно другой ошибкой, что не может произойти только с примером makefile, который вы показываете выше. – MadScientist