如何在定义makefile中避免bash for循环的变量扩展

时间:2019-04-09 15:12:52

标签: makefile gnu-make

通常,我在makefile中使用foreach调用。尽管如此,我想尝试其他方法。 为此,我创建了下面的代码。

我正在使用GNU Make 3.81 我已经用信息代替了评估,以了解正在发生的事情。 我无法避免同时调用和eval扩展来保持$ file

我的意思是,当我打开文件时,我得到: “对于* .v中的文件;执行echo; echo;完成;> 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 个答案:

答案 0 :(得分:1)

你快到了。

如果在外壳程序中运行循环,则必须在变量名前加上'$',以便将其展开。

如果您将该命令放入makefile配方中,为防止Make太早扩展变量名(当尚未给变量赋值时),则必须在“ $”之前加上另一个“ $” $”。

如果您将食谱放在一个定义中,并以call进行扩展,则您必须将其中的加倍:

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