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

how to avoid variable expansion for a bash for loop in define makefile

通常,我在 makefile 中使用 foreach 调用。尽管如此,我还是想尝试不同的方法。 为此,我创建了以下代码。

我正在使用 GNU Make 3.81 我已将 eval 替换为 info 以了解发生了什么。 我无法避免调用和 eval 扩展以保留 $file

我的意思是,当我打开文件时,我得到: "for file in *.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)))))

提前谢谢你,

你快到了。

如果您运行 shell 中的循环,您必须在变量名称前加上“$”,以便展开。

如果将该命令放入 makefile 配方中,为防止 Make 过早扩展变量名(当变量尚未被赋予值时),您必须在 ("escape") 之前 ("escape") '$ ' 与另一个 '$'.

如果您将该食谱放入您将用 call 扩展的定义中,您必须将 每个 个加倍:

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