在 Makefile 中打印时间戳

7

我希望能够测量make文件中每个构建项的时间,我只是尝试了下面的内容,为什么它不起作用?

mytest:
    $(info '现在时间是$(date --iso=seconds)')

日期没有被打印出来,只有

'现在时间是'
被打印。可能出了什么问题?

make --version GNU Make 3.81


发现评论无法嵌入代码,我会提出另一个问题。 - bzhu
1个回答

15

没有名为datemake函数。如果你想调用一个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)"

双美元符号在Makefile中用于将美元符号转义,以便通过命令替换传递到shell中。

显而易见的是,Makefile使用的语法与shell的命令替换语法非常相似。在Makefile中,您可以使用$(shell command)$$(command)来将command传递给shell。前者在纯Make片段(即Makefile中的变量定义等)中很有意义;后者仅在recipes中可用。


1
还有!=用于分配由shell命令返回的值。 - user657267
@user657267 谢谢,我以前不熟悉这个。文档可以在 https://www.gnu.org/software/make/manual/make.html#index-_0021_003d 找到,但在我的快速实验中,在OSX上使用make 3.81似乎不起作用;在Linux上,使用make 4.0,它对我有效。 - tripleee
是的,它在4.0中添加了。 - user657267
获取日期的秒数--iso-seconds在Debian上对我无效,我使用date +%s。 - huesforalice
@huesforalice 那将会给你秒数,而不是--iso=seconds产生的ISO格式时间。这里的第一个答案展示了如何使用标准的date命令获取ISO格式时间,即使用格式字符串+%FT%T%z - tripleee

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