簡體   English   中英

如何分析/優化 Objc/C++ 項目編譯時間?

[英]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打開):

  1. https://github.com/nst/objc_dep
  2. http://github.com/PaulTaykalo/objc-dependency-visualizer

我還看到了 Swift 的此類構建標志: -warn-long-function-bodies=200 / -warn-long-expression-type-checking=200 這些標志可以標記長函數,但它們能解釋為什么那些 function 這么長嗎? 例如,可能某些for loop寫得不好,編譯器必須對其進行優化以加快執行速度。 在這種情況下,如果程序員以更優化的方式編寫該循環,編譯器就不必優化它,程序員也不會在每次構建時等待 1-2 秒。


所以,假設有一個在 N 秒內編譯的 Objc/C++ 文件。 問題是:

  1. 如何查看此文件的“划分”時間? 例如preprocessing a whole file :N/4 秒, compile func1 :N/4 秒, compile func2 :N/4 秒, optimize an assembly :N/4 秒。
  2. 是否有clang用於此類事情?
  3. 如何檢查是否有不必要的#include / #import會減慢編譯速度。
  4. 編譯時間能否與 Xcode 必須打印的許多警告相關聯? (我知道我可以通過消除警告來檢查它,但是 C++ 文件幾乎沒有警告,而且編譯時間更長)。

我知道這是一個廣泛的話題,因此非常感謝任何鏈接/建議。

對於單個編譯單元,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM