Переменная цикла в gmake пуста - PullRequest
0 голосов
/ 29 июня 2018

У меня есть список заголовочных файлов, созданных таким образом:

expand=$(1)/$(1).h
HDRS=$(foreach x, $(DIRS), $(call expand,$(x)))

Который дает список вроде a / a.h b / b.h ...

но когда я использую это в цикле for:

for i in $(HDRS) ; do \
    echo $$i \
    cp $$i $(some_dir) \
done

$$ я пуст. И cp не работает, имея только один аргумент.

Обычные варианты $$ i ($ i, $$ i, $ (i), $ {i}) ничего не меняют, как и обычные варианты $ (HDRS) ("$ (HDRS) ) и т. д.).

gmake повторяет цикл for как

for i in a.h b.h ; \
do \
    echo $i \
    cp $i somedir \
done

Что выглядит правильно.

Но неявная оболочка bash выдает ошибку "/ bin / sh -c: строка 5: синтаксическая ошибка: неожиданный конец файла"

Затем gmake завершает работу из-за неудачной команды.

1 Ответ

0 голосов
/ 29 июня 2018

Из-за \, make выдает рецепт одной строкой. Это смущает оболочку. Попробуйте вместо этого использовать ; вместо терминатора строки:

for i in a.h b.h ; \
do \
    echo $i ; \
    cp $i somedir ; \
done
...