如何避免定义 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
通常,我在 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