как избежать расширения переменной для цикла для bash в make-файле определения - PullRequest
0 голосов
/ 09 апреля 2019

Обычно я использую вызов foreach в make-файле. Несмотря на это, я хотел попробовать разные подходы. Для этого я создал код ниже.

Я использую GNU Make 3.81 Я заменил eval на информацию, чтобы понять, что происходит. Я не могу избежать как вызова, так и расширения eval, чтобы сохранить файл $

Я имею в виду, когда я открываю файл, я получаю: "для файла в * .v; do echo; echo; done;> trial.sh;"

define create_area
$(1): $(2)
    mkdir -p $$(@D); \
    cp -nLr -v $(2)/* $$(@D); \
    cd $$(@D); \
    for file in *.v; do echo $$(file); \
    done; \
    " > trial.sh;

$(foreach a,$(A1) $(A2),\
$(foreach b,$(B1),\
$(eval $(call create_area,$(a),$(b)))))

Заранее спасибо,

1 Ответ

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

Ты почти у цели.

Если вы запускаете цикл в оболочке, перед именем переменной должно стоять '$', чтобы оно было расширено.

Если вы поместите эту команду в рецепт make-файла, чтобы предотвратить слишком быстрое расширение Make имени переменной (когда переменной еще не было дано значение), вы должны предшествовать («escape») этому «$» с другим ». $».

Если вы добавите этот рецепт в определение, которое вы расширите с помощью call, вы должны удвоить каждого из них:

for file in *.v; do echo $$$$file; done
...