命令替换不能与makefile

时间:2018-01-24 18:15:00

标签: bash shell makefile scripting

这是一个在我的bash shell中工作正常的简单命令:

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

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

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

生成文件:

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

运行make README.md会将命令替换视为空字符串,如下所示:

echo "Created at: " >> README.md

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

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

1 个答案:

答案 0 :(得分:2)

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

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

然后,您需要在规则中使用另一个$转义$

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

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

出于第一个

请注意,如果Make的变量date定义如下,那么它将按预期工作,而不会引用规则中的$

date = $$(date)

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

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