在 makefile 中,使用 echo 命令替换不起作用。

5

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

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

它将创建于:2018年1月24日星期三10:04:48 STD追加到README.md文件末尾。

然而,如果我在我的makefile中包含相同的命令,行为会有所不同。

makefile:

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

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

README.md中附加的是创建于:

如何在makefile中使用命令替换并使echo正确输出?


1
这个问题绝对不是链接答案的重复。我确定在SO上有很多很多很多关于这个问题的答案,但那个不是其中之一。 - MadScientist
我添加了一个与这个问题相关的重复链接。 - MadScientist
1个回答

4
如果您希望Make调用的Shell接收以下内容:
echo "Created at: $(date)" >> README.md

接下来,您需要在规则内部用另一个$转义$

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

否则,Makefile中的变量date将被扩展,并且这将是echo获得的参数,因为在Makefile中$(date)会扩展为变量date。请注意,如果定义Makefile中的变量date如下所示,则不需要在规则中引用$也可以正常工作:
date = $$(date)

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接