Bash 命令替换不';无法在makefile中使用echo

Bash 命令替换不';无法在makefile中使用echo,bash,shell,makefile,scripting,gnu-make,Bash,Shell,Makefile,Scripting,Gnu Make,下面是一个在我的bash shell中运行良好的简单命令: echo "Created at: $(date)" >> README.md 它将于2018年1月24日星期三10:04:48标准时间创建的附加到README.md 但是,如果我在makefile中包含相同的命令,则行为不同 生成文件: README.md: echo "Created at: $(date)" >> README.md 运行make README.md会将命令替换视为空字符串,如下

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

echo "Created at: $(date)" >> README.md
它将于2018年1月24日星期三10:04:48标准时间创建的
附加到README.md

但是,如果我在makefile中包含相同的命令,则行为不同

生成文件:

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

echo "Created at: " >> README.md
添加到README.md的内容创建于:


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

如果希望Make调用的shell接收以下内容:

echo "Created at: $(date)" >> README.md
然后,您需要使用规则中的另一个
$
来转义
$

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

README.md:
    echo "Created at: $(date)" >> README.md
否则,Make的变量
date
将展开,这将是
echo
作为参数获取的内容,因为makefile中的
$(date)
将展开变量
date


出局 请注意,如果Make的变量
date
定义如下,则它将按预期工作,而无需在规则中引用
$

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

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

原因是变量
date
(在规则的配方中使用)将通过Make to
$(date)
展开,并将其传递给shell。

此问题肯定不是链接答案的重复。我确信这个问题有很多很多答案,但那个答案不是。我添加了一个与这个问题相关的重复链接。