我希望能够测量make文件中每个构建项的时间,我只是尝试了下面的内容,为什么它不起作用?
mytest: $(info '现在时间是$(date --iso=seconds)')
日期没有被打印出来,只有
'现在时间是'被打印。可能出了什么问题?
make --version
GNU Make 3.81
没有名为date
的make
函数。如果你想调用一个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中可用。
!=
用于分配由shell命令返回的值。 - user657267make
3.81似乎不起作用;在Linux上,使用make
4.0,它对我有效。 - tripleee--iso=seconds
产生的ISO格式时间。这里的第一个答案展示了如何使用标准的date
命令获取ISO格式时间,即使用格式字符串+%FT%T%z
。 - tripleee