我需要找出哪些翻譯單元需要重新編譯以提高編譯時間,我如何使用cmake爲我的翻譯單元獲得編譯時間?cmake:編譯統計
回答
我希望用'time original-cmd'代替編譯器(和/或連接器)。使用簡單的'make',我會說:
make CC="time gcc"
'時間'程序將運行命令並報告所花費的時間。等效機制將與'cmake'一起工作。如果你需要捕獲命令和時間,那麼你可以編寫你自己的類似於時間的命令(一個shell腳本會這樣做),以你想要的方式記錄你想要的數據。
通常'時間'是內置命令。要使用詳細模式,需要鍵入'make CC =「/ usr/bin/time -v gcc」'命令。 – Orient 2015-12-07 11:49:32
您不能通過編譯器以這種方式爲CMake生成的make文件傳遞編譯器。通常它不起作用。 – usr1234567 2017-06-29 14:54:33
要在以前的答案擴大,這裏就是我剛寫了一個具體的解決方案 - 這是說,在實踐中肯定工程,不僅在理論上,而且大約三分鐘已經使用僅由一人,所以它可能有一些不足之處。
#!/bin/bash
{ time clang "[email protected]"; } 2> >(cat <(echo "clang [email protected]") - >> /tmp/results.txt)
我把/tmp/time-clang
上述兩行,然後跑
chmod +x /tmp/time-clang
cmake .. -DCMAKE_C_COMPILER=/tmp/time-clang
make
您可以使用-DCMAKE_CXX_COMPILER=
掛鉤C++編譯器在完全相同的方式。
我沒有使用
make -j8
,因爲我不想要的結果,以怪異的方式獲得交錯。我不得不在我的腳本上放置一個明確的hashbang
#!/bin/bash
,因爲Ubuntu 12.04上的默認shell(dash
,我想?)對這些重定向操作符不滿意。
這對我很好,謝謝!然而,我試圖(並且掙扎)只從'time'中提取'real'輸出,並將它和clang命令*一起打印到* results.txt中? – 2017-06-28 22:13:33
以下屬性可以用來實時編譯器和鏈接器調用:
,這些屬性可以全局設置,每個目錄和每個目標。這樣你就只能有一部分目標(比如測試)受到這個屬性的影響。你也可以爲每個目標有不同的「發射器」,這也可能是有用的。
請記住,在使用「時間」並不能直接移植,因爲這個實用程序不可由CMake的支持的所有平臺。但是,CMake在其command-line tool mode中提供了「時間」功能。例如:
# Set global property (all targets are impacted)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
# Set property for my_target only
set_property(TARGET my_target PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
例CMake的輸出:
[ 65%] Built target my_target
[ 67%] Linking C executable my_target
Elapsed time: 0 s. (time), 0.000672 s. (clock)
注意,作爲CMake的3.4的僅生成文件和忍發電機支持此性質。
還要注意,因爲CMake的3.4 cmake -E time
的具有內部參數的空間問題。例如:
cmake -E time cmake "-GUnix" "Makefiles"
我提交patch修復此問題:
cmake -E time cmake "-GUnix Makefiles"
會被解釋。
- 1. CMake編譯標誌
- 2. cmake交叉編譯
- 3. 使用cmake編譯
- 4. 用Cmake編譯庫
- 5. g ++編譯失敗,Cmake不編譯
- 6. Clion和cmake編譯錯誤
- 7. 用CMake和minGW編譯OpenCV
- 8. CMake包括預編譯庫
- 9. 用CMake爲iOS編譯
- 10. cmake和默認編譯器
- 11. CMake CMAKE_AUTOMOC交叉編譯
- 12. 沒有cmake的編譯源
- 13. 用CMake編譯Vala項目
- 14. CMake的重新編譯
- 15. 用cmake編譯qt庫
- 16. CMake的不編譯什麼
- 17. Cmake交叉編譯標誌
- 18. cmake的編譯錯誤
- 19. CMake,選擇Xcode編譯器
- 20. CMake的失敗編譯
- 21. Cmake編譯器問題
- 22. Cmake更改編譯標誌
- 23. 使用cmake編譯CSDP
- 24. 一種編譯uCLinux操作系統musescore與QT和cmake的
- 25. 如何讓CMake在系統PATH上使用默認編譯器?
- 26. 編譯統計::基本草莓失敗
- 27. Cmake統計文件中字的出現
- 28. glibc編譯系統
- 29. 如何使用CMake在編譯時定義編譯器標誌?
- 30. 如何用cmake修改編譯器進行交叉編譯
正如我一直認爲'cmake'只爲本機構建系統(make,nmake等)生成conf文件。所以cmake實際上並沒有涉及編譯/鏈接過程。也許你應該在你的本地構建系統中尋找這樣的選項。 – beduin 2011-05-11 11:06:37
這是一個相當常見的用例。但是,如果你知道如何爲標準的linux製作,那將是最有幫助的。 – 2011-05-11 12:24:07
不幸的是,我不知道有任何製作選項可以實現這一點。我想到的第一個解決方案是修改'Makefiles'來爲每個'gcc'命令調用'time'。 – beduin 2011-05-11 13:18:12