как использовать оператор if из функции makefile? - PullRequest
1 голос
/ 22 апреля 2019

Я читаю конфигурации из файла .config и хочу выполнить некоторую операцию, если конфигурация включена.Я написал следующую функцию, но она выдает сообщение об ошибке " / bin / sh: 1: Синтаксическая ошибка:") "неожиданно (ожидается" затем ") "

define parse_configs
    while read -r file; do \
        config=$$(echo $$file | grep -Po '(?<=(CONFIG_)).*(?==)'); \
        val=$$(echo $$file | grep -Po '(?<=(=)).*'); \
        $$(if $(findstring y, $$val), echo "do Ops", echo "No ops"); \
    done < .config;
endef

Проблемас оператором if, другая часть функции в порядке.Пожалуйста, дайте мне знать об ошибке в коде.Спасибо.

1 Ответ

1 голос
/ 22 апреля 2019

Что не так с утверждением:

$$(if $(findstring y, $$val), echo "do Ops", echo "No ops");

- это на самом деле GNU Make if-function , вызов GNU Make функции findstring , который вы написали в середине оператора оболочки, и потребовали ($$), чтобы он был расширен оболочкой, но для оболочки это не имеет смысла. Это также может быть Javascript. Замените его соответствующей оболочкой оператором if, например

while read -r file; do \
    config=$$(echo $$file | grep -Po '(?<=(CONFIG_)).*(?==)'); \
    val=$$(echo $$file | grep -Po '(?<=(=)).*'); \
    if [ -z $${val##*"y"*} ]; then echo "do Ops"; else echo "No ops"; fi; \
done < .config;
...