Сравнение строк аргументов Makefile

#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. Я узнал от вас кое-что новое. Иногда выполнение ошибки может быть полезным для других, чтобы научиться этого не делать. 🙂 Это работает нормально. Спасибо.