#bash #makefile
#bash #makefile
Вопрос:
Я передаю аргумент в целевой файл makefile. Я хочу выполнить сравнение строк аргумента. Это мой код,
mode = p
install:
@echo mode is $(mode)
ifeq ($(mode),"p")
@echo mode is production
else
@echo mode is development
endif
Я получаю следующую ошибку как,
mode is d
ifeq (d,"p")
/bin/sh: 1: Syntax error: word unexpected (expecting ")")
В чем ошибка и каково общее правило для сравнения строк в скриптах bash?
Комментарии:
1. Еще один вопрос — «Как вы передаете mode в make?» С
make mode=d ...
?2.
make mode=d install
Ответ №1:
В качестве рецепта используется чистый синтаксис make ( ifeq
) (строка начинается с табуляции). Попробуйте это вместо:
mode = p
install:
@echo mode is $(mode)
ifeq ($(mode),p)
@echo mode is production
else
@echo mode is development
endif
Комментарии:
1. Я получил ошибку
*** missing separator. Stop.
в строке `Режим @echo находится в разработке`.2. Сделайте так, чтобы рецепты начинались с символа табуляции. Не пробелы. Не просто копируйте-вставляйте код. Отредактируйте его и замените начальные пробелы одним символом табуляции.
3. Спасибо. Это моя команда ввода.
make mode=d install
. Мой вывод выглядит следующим образом,mode is d mode is development
но для вводаsudo make mode=p install
также выполняется оператор else. Мой вывод,mode is p mode is development
4. Моя ошибка: я скопировал ваш код и лишь слегка изменил его. Мне следовало быть более осторожным: удалить
"
вокруг"p"
. Строки Make не"
разделены. Таким образом,"
символы являются частью строки, и сравнение междуp
и"p"
завершается неудачей. Отредактировал мой ответ соответствующим образом.5. Я узнал от вас кое-что новое. Иногда выполнение ошибки может быть полезным для других, чтобы научиться этого не делать. 🙂 Это работает нормально. Спасибо.