gpt4 book ai didi

bash - 命令替换不适用于 makefile 中的 echo

转载 作者:行者123 更新时间:2023-12-03 23:17:12 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why doesn't my Makefile interpolate an expression in a command

(2 个回答)


3年前关闭。




这是一个在我的 bash shell 中运行良好的简单命令:

echo "Created at: $(date)" >> README.md

它附加 Created at: Wed Jan 24 10:04:48 STD 2018到 README.md。

但是,ii 我在我的 makefile 中包含相同的命令,行为是不同的。

生成文件:
README.md:
echo "Created at: $(date)" >> README.md

运行 make README.md将命令替换视为一个空字符串,如下所示:
echo "Created at: " >> README.md

附加到 README.md 的是 Created at: .

如何使用 makefile 中的 echo 获取命令替换以正确输出?

最佳答案

如果您希望 Make 调用的 shell 接收以下信息:

echo "Created at: $(date)" >> README.md

然后,您需要逃离 $与另一个 $规则内:
README.md:
echo "Created at: $$(date)" >> README.md

否则,Make 的变量 date被扩展,这就是 echo得到作为参数,因为 $(date)在 makefile 中扩展变量 date .

出于兴趣

注意,如果 Make 的变量 date定义如下,但是它会按预期工作而不引用 $在规则中:
date = $$(date)

README.md:
echo "Created at: $(date)" >> README.md

原因是变量 date (在规则的配方中使用)将由 Make 扩展为 $(date)这将传递给 shell 。

关于bash - 命令替换不适用于 makefile 中的 echo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48429075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com