[英]How can Objc/C++ project compilation time be profiled/optimized?
我的 Objc/C++ 項目編譯時間太長。 即使 Xcode 進行增量構建,也可能需要 140 秒 = 2.5 分鍾。
問題是,2.5 分鍾的增量構建並沒有說明什么可以改進。 例如Xcode Report Navigator
顯示某些文件是在4.2s
中編譯的:
如何檢查此文件是否可以在2.1s
中編譯? 0.3s
? 除了生成的二進制文件中的符號數量之外,還有哪些約束?
我聽說有人應該使用模塊來加速增量構建,但假設我正在嘗試加快已提取模塊的編譯時間。
我聽說有某種“符號依賴圖”,但還沒有找到任何實用的建議如何使用它來解決編譯時問題。
我已經嘗試過這樣的工具來發現“符號依賴項”,但它們似乎太高級了(第一個生成的文件太大而無法在 MacOS 上用graphviz
打開):
我還看到了 Swift 的此類構建標志: -warn-long-function-bodies=200
/ -warn-long-expression-type-checking=200
。 這些標志可以標記長函數,但它們能解釋為什么那些 function 這么長嗎? 例如,可能某些for loop
寫得不好,編譯器必須對其進行優化以加快執行速度。 在這種情況下,如果程序員以更優化的方式編寫該循環,編譯器就不必優化它,程序員也不會在每次構建時等待 1-2 秒。
所以,假設有一個在 N 秒內編譯的 Objc/C++ 文件。 問題是:
preprocessing a whole file
:N/4 秒, compile func1
:N/4 秒, compile func2
:N/4 秒, optimize an assembly
:N/4 秒。clang
用於此類事情?#include
/ #import
會減慢編譯速度。我知道這是一個廣泛的話題,因此非常感謝任何鏈接/建議。
對於單個編譯單元,Clang 具有-ftime-trace
參數來激活時間分析器。
它將生成一個 JSON 文件,可以將其可視化為火焰圖,例如在 chrome://tracing
編譯時間在前端和后端之間分配。 您可以查看包含的所有標頭,以及解析它們所花費的時間。
如果您在 Xcode 中,並且想要分析單個文件:在 Xcode Report Navigator 中打開最后一個構建,然后復制粘貼用於編譯此文件的命令行。
或者,您可以在 Build Settings 中將-ftime-trace
添加到 Clang 編譯器標志,因此它將為所有編譯文件生成此配置文件(每個編譯單元的單獨 JSON 跟蹤)。 然后,您可以單獨查看每個跟蹤,或使用ClangBuildAnalyzer等工具獲取摘要。 您將不得不從以前的構建中手動刪除 JSON 文件(或添加自定義構建階段,或在 Xcode 中調用 Clean Bulid 文件夾)。
清理不需要的標頭:只需將它們全部注釋掉,然后僅將那些減少編譯錯誤的注釋一一取消。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.