【发布时间】:2014-12-21 06:56:55
【问题描述】:
在 Makefile 中插入 shell 脚本时,我们可以 (?) 使用双美元符号 ($$) 来引用变量。为什么会这样?
for number in 1 2 3 4 ; do \
echo $$number ; \
done
【问题讨论】:
在 Makefile 中插入 shell 脚本时,我们可以 (?) 使用双美元符号 ($$) 来引用变量。为什么会这样?
for number in 1 2 3 4 ; do \
echo $$number ; \
done
【问题讨论】:
配方中的变量和函数引用具有相同的语法和 makefile 中其他地方的引用的语义。他们也有 相同的引用规则:如果您希望美元符号出现在您的 食谱,你必须把它加倍('$$')。对于像默认外壳这样的外壳, 使用美元符号来引入变量,重要的是要保持 清楚你要引用的变量是否是 make 变量(使用单个美元符号)或 shell 变量(使用两个 美元符号)。
简而言之:
【讨论】:
$(foo) 或${foo}是对变量 foo 的有效引用。$ 的这种特殊意义就是为什么您必须编写 $$ 才能在文件名或配方中产生单个美元符号的效果。"
不直接适用于这个例子——除非显示的代码是通过$(shell ...)而不是规则执行的:
启用二级扩展后,make 还可能在第二个处理阶段解释双美元本身,当它出现在先决条件列表中时。 (第一阶段:读取文件,设置变量;第二阶段:查找和调用依赖目标,执行规则)
当具有目标名称的变量仅在文件中稍后可用时,这用于允许动态指定依赖目标。
见https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html。
【讨论】: