[英]Calculate makefile build time
任何有創意的想法如何使用環境變量來計算Makefile的完整構建時間? 我可以將時間存儲在某個地方並最終進行比較嗎?
我知道OP表示Windows操作系統,但據記錄,在任何Linux機器上,您都可以使用time
:
>time make -j
real 0m9.774s
user 0m31.562s
sys 0m1.092s
在Windows 7上,您具有PowerShell。 因此,我們假設:
Makefile
位於目錄C:\\Dev\\ProjDir
mingw32-make
,位於PATH
如果PowerShell不是您常用的控制台,請執行以下操作:
C:\Dev\ProjDir>powershell
在PowerShell提示符下,運行:
PS C:\Dev\ProjDir> Measure-Command { mingw32-make | Out-Default }
這將運行您的構建並顯示輸出,然后是時序報告,例如
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 244
Ticks : 2443841
TotalDays : 2.82851967592593E-06
TotalHours : 6.78844722222222E-05
TotalMinutes : 0.00407306833333333
TotalSeconds : 0.2443841
TotalMilliseconds : 244.3841
繼續進行OP的后續行動:
我想知道是否可以將其作為makefile的一部分來實現,因此我可以決定要測量的部分
計時“ makefile的一部分”的想法沒有明確的道理。 運行make
,它將在生成任何內容之前先解析整個makefile ,並計算出創建指定目標或默認目標所必須執行的全部步驟。 然后,采取所有這些步驟。
也許您想衡量制定特定目標所需的時間? 您可以按照已描述的方式進行操作。 例如,假設您的makefile可以創建兩個庫libfoo.lib
和libbar.lib
而您想定時libfoo.lib
的構建。 要libfoo.lib
制作libfoo.lib
,將運行以下make命令:
mingw32-make libfoo.lib
因此,要計時此命令,請運行:
PS C:\Dev\ProjDir> Measure-Command { mingw32-make libfoo.lib | Out-Default }
或者,假設你的makefile使得app.exe
從源文件foo.c
和bar.c
,和你想的時間目標文件只是構建foo.obj
, bar.obj
。 您將用來構建那些目標文件的make命令是:
mingw32-make foo.obj bar.obj
因此,您可以使用以下時間:
PS C:\Dev\ProjDir> Measure-Command { mingw32-make foo.obj bar.obj | Out-Default }
也許您希望能夠在makefile中調用powershell的Measure-Command
來計時特定目標的建立?
為此,您需要一個調用PowerShell的命令以運行其他命令。 那是:
powershell -c "some other command"
因此,在您的makefile文件中,您可以添加一個目標來計時任何其他目標的構建:
.phony: time
time:
powershell -c "Measure-Command { $(MAKE) $(targets) | Out-Default }"
您可以這樣使用time
目標:
C:\Dev\ProjDir>mingw32-make time targets=app.exe
要么:
C:\Dev\ProjDir>mingw32-make time targets="foo.obj bar.obj"
當然,在您的makefile中,用於構建特定目標的命令可以在任何您喜歡的地方包括powershell -c "some other command"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.