通常,我在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)))))
先谢谢您
答案 0 :(得分:1)
你快到了。
如果在外壳程序中运行循环,则必须在变量名前加上'$',以便将其展开。
如果您将该命令放入makefile配方中,为防止Make太早扩展变量名(当尚未给变量赋值时),则必须在“ $”之前加上另一个“ $” $”。
如果您将食谱放在一个定义中,并以call
进行扩展,则您必须将其中的个加倍:
for file in *.v; do echo $$$$file; done