在生成文件中显示Makefile生成文件的生成持续时间
,我可以打印生成开始和完成之前的时间。在生成文件中显示Makefile生成文件的生成持续时间
myitem: printf 'start time is %s\n' "$$(date --iso-seconds)" #other build command, i.e. g++ xxxx.cpp printf 'end time is %s\n' "$$(data --iso-seconds)"
是否有任何其他方式实现像下面的Make文件?
myitem: starttime = $$(date) #start my build printf "The build took time:" NowTime - startTime
如果这仅仅是为了提供信息,最简单的方法是在time
命令下运行构建。
要全部回答您的问题,请继续阅读。
默认情况下,配方的每一行都在单独的shell实例中运行。要使用早期命令中的变量,请使用单个外壳程序。也许是这样的:
myitem:
d=$$(date +%s)\
; build \
&& echo "Build took $$(($$(date +%s)-d)) seconds"
所以这是由make
视为一个长的逻辑线反斜杠逃脱换行符。分号和&&
是声明分隔符 - 我发现它的帮助(因为它是如此的丑陋!)把它们放在下一行的开头只是为了提醒自己,这是一个复合命令。如果构建失败,&&
之后的内容将不会执行;这稍微不雅观,但比认为你的构建没有成功时更好。
我(纪元以来秒)切换为date +%s
,因为这是如此容易通过编程工作。
在GNU Make中,您也可以使用.ONESHELL。
谢谢你的回答,它有效。但是有一个错字,在第二行应该是d=$$(date +%s)\
–
user792883
咄,指点出来的感谢!现在修复。 – tripleee
一个简单的方法是用/bin/time
前缀你的命令,例如:
/bin/time --format="took %E" <the build command, i.e. g++ xxxx.cpp>
我不认为有一个内置的方式做到这一点。您必须在Unix中使用外部工具,如“时间”程序。据我所知,没有本地类似的Windows命令,但必须有可用的PowerShell或Unix端口。 – Tim
相关:http://*.com/questions/15171305/adding-time-duration-of-my-build-into-makefile – reinierpost
您可以定义'SHELL = time'或类似的,你有最近的GNU制作, '.ONESHELL'作为一个整体来执行(和定时)食谱。 – reinierpost