Joh*_*ika 5 bash shell scripting makefile gnu-make
这是一个在我的 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 正确地进行命令替换输出?
如果您希望 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。