2016-06-09 114 views
2

,我可以打印生成開始和完成之前的時間。在生成文件中顯示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://stackoverflow.com/questions/15171305/adding-time-duration-of-my-build-into-makefile – reinierpost

+0

您可以定義'SHELL = time'或類似的,你有最近的GNU製作, '.ONESHELL'作爲一個整體來執行(和定時)食譜。 – reinierpost

回答

3

如果這僅僅是爲了提供信息,最簡單的方法是在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

1

一個簡單的方法是用/bin/time前綴你的命令,例如:

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