在生成文件中显示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 
+0

我不认为有一个内置的方式做到这一点。您必须在Unix中使用外部工具,如“时间”程序。据我所知,没有本地类似的Windows命令,但必须有可用的PowerShell或Unix端口。 – Tim

+0

相关:http://*.com/questions/15171305/adding-time-duration-of-my-build-into-makefile – reinierpost

+0

您可以定义'SHELL = time'或类似的,你有最近的GNU制作, '.ONESHELL'作为一个整体来执行(和定时)食谱。 – reinierpost

如果这仅仅是为了提供信息,最简单的方法是在time命令下运行构建。

要全部回答您的问题,请继续阅读。

默认情况下,配方的每一行都在单独的shell实例中运行。要使用早期命令中的变量,请使用单个外壳程序。也许是这样的:

myitem: 
    d=$$(date +%s)\ 
    ; build \ 
    && echo "Build took $$(($$(date +%s)-d)) seconds" 

所以这是由make视为一个长的逻辑线反斜杠逃脱换行符。分号和&&是声明分隔符 - 我发现它的帮助(因为它是如此的丑陋!)把它们放在下一行的开头只是为了提醒自己,这是一个复合命令。如果构建失败,&&之后的内容将不会执行;这稍微不雅观,但比认为你的构建没有成功时更好。

我(纪元以来秒)切换为date +%s,因为这是如此容易通过编程工作。

在GNU Make中,您也可以使用.ONESHELL

+0

谢谢你的回答,它有效。但是有一个错字,在第二行应该是d=$$(date +%s)\ user792883

+0

咄,指点出来的感谢!现在修复。 – tripleee

一个简单的方法是用/bin/time前缀你的命令,例如:

/bin/time --format="took %E" <the build command, i.e. g++ xxxx.cpp>