[英]Measure (profile) time spent in each target of a Makefile
有沒有辦法在我完成make all
時以遞歸方式回顯Makefile
中每個目標所花費的時間(系統,用戶,實際)?
我想以更精細的方式對項目的編譯進行基准測試,而不僅僅是time make all
。 理想情況下,它會回顯執行目標的樹,每個樹都有在其所有依賴項中花費的時間。 如果它可以與-j
(並行make)一起使用也會很棒。 順便說一句,我的Makefile
是非遞歸的(不會為每個主要目標生成另一個make
實例)。
謝謝!
Gnu Make使用$(SHELL)變量在目標中執行命令。
默認情況下,它設置為/ bin / sh。
您可以將此變量設置為將執行使用“time”命令指定的命令的腳本。 像這樣的東西:
在你的makefile中,在頂部的某處指定SHELL變量:
SHELL = ./report_time.sh
並在文件./report_time.sh中:
#!/bin/sh
shift # get rid of the '-c' supplied by make.
time sh -c "$*"
將'sh'命令替換為Makefile中指定的原始SHELL(如果有)。
這將報告時間。
但是,這不會告訴您report_time.sh腳本正在運行的目標。 對此的一個解決方案是在makefile中的每個目標條目中添加目標名稱($ @),以便它也將傳遞給report_time.sh腳本。
翻拍--profile是make
替代品。 它以callgrind格式生成目標調用樹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.