2016-06-09 53 views
0

我想测量生成文件中每个生成项目的时间,我只是在下面尝试,为什么它不起作用?在生成文件中打印时间戳

 
mytest: 
    $(info 'Now time is $(date --iso=seconds)') 

日期不打印,只打印

'Now time is '
。什么可能是错误的?

make --version GNU Make 3.81

+0

发现注释不能嵌入代码,我会问另一个问题 – user792883

回答

3

没有make功能命名date。如果你想调用一个shell命令,语法是$(shell date)

在配方中使用$(info)不是特别优雅;该函数不会产生任何对传递给shell有用的内容。您可能正在寻找只是为了

mytest: 
    date +"Now time is +%FT%T%z" 

(找不到--iso-seconds记录是否正常;抓住从这个博客把定义:http://nixscripts.blogspot.com/2010/07/hidden-arguments-easter-egg-or-what.html

...或许不那么有效

mytest: 
    printf 'Now time is %s\n' "$$(date --iso-seconds)" 

哪里双美元符号从Make中跳出美元符号,以便您通过shell的命令替换。

仅仅指出显而易见的是,Make使用的语法与shell的命令替换语法非常相似,这是不幸的。在Make中,使用$(shell command)$$(command)command传递给shell。前者在纯制作片段(Makefile适当的变量定义等)中是有意义的;后者只在食谱中可用。

+1

还有'!='用于分配shell命令返回的值。 – user657267

+0

@ user657267谢谢,我对此并不熟悉。文档例如在https://www.gnu.org/software/make/manual/make.html#index-_0021_003d,但在我的快速实验中,它似乎不适用于OSX上的'make' 3.81;在Linux上,使用'make' 4.0,它确实对我有用。 – tripleee

+0

是的,它是在4.0中添加的。 – user657267