導航:首頁 > 源碼編譯 > 編譯器用vs多少

編譯器用vs多少

發布時間:2025-03-19 19:59:30

㈠ 5分鍾掌握cmake(18): 在MSVC下加速編譯OpenGV

記錄使用 VS2022 里的 cl.exe 作為 C++ 編譯器時,將開源項目 opengv 的編譯耗時縮短的相關技巧。

環境:Windows 11, VS2022 17.8.0, CMake 3.27.4。 耗時:Release模式的耗時從157分鍾減少到115分鍾; Debug模式的耗時從176秒減少到49秒。

首先澄清, Linux 上編譯 OpenGV 很快,幾十秒到幾分鍾的樣子。

Windows 上編譯 OpenGV 慢,整體的原因是:依賴了 Eigen 這個 header-only 庫,且構建的大量時間是在處理 Eigen 的3個頭文件,每次出現34次,耗時非常可觀。

在微軟官方的討論帖 Slow C++ compiling on some eigen heavy code 中,給出了 Eigen 代碼在 Release 模式下編譯較慢的原因:forceinline 關鍵字需要被編譯器展開,耗時較多。因此,嘗試將 Debug 模式的編譯耗時縮短,再將相關的編譯加速技巧應用到 Release 模式上。

在 Debug 模式編譯耗時優化方面,包括使用 msbuild + MTT(環境變數 UseMultiToolTask 設置為 true),使用 ninja 替代 msbuild,以及 Unity(Jumbo) build。

ninja 默認使用並行編譯,且使用 -G Ninja Multi-Config 可以在 build 階段自由切換 debug / release。因此,我們使用它來做構建。在使用 ninja 構建時,耗時結果為49秒,稍快於 msbuild + ninja。

Unity(Jumbo) build 通過設置環境變數 EnableUnitySupport=true 來啟用,觀察到 msbuild 自動創建了單一的 cpp 文件,耗時為 1分8秒(68秒),無需考慮是否開啟 MTT。

顯式設定 cl.exe 並行數量,通過在 cmake --build 時傳入 -- /p:CL_MP=true /p:CL_MPCount=12 參數,讓 cl.exe 使用12個並行進程,構建耗時為 2分4秒。

Debug 模式編譯耗時匯總:ninja 最快,msbuild + MTT 則接近 ninja,unity build 有加速但不夠快。MTT 的實用性很強。

對於 Release 模式的構建,CI 伺服器上使用 vs2019 的耗時為 Debug + Release 兩種模式的總耗時,Release 模式的編譯耗時在2小時左右,遠遠高於 Debug 耗時;Ninja 方式的構建速度快於其他方式。

總結:通過優化編譯器配置、利用並行編譯技術、改進構建策略等方法,可以顯著縮短編譯時間,提升開發效率。

閱讀全文

與編譯器用vs多少相關的資料

熱點內容
郵件附件加密後打開能顯示嗎 瀏覽:720
榮耀x10拍照演算法 瀏覽:567
androidgradle配置簽名 瀏覽:92
文件夾左邊的空心三角符號是什麼 瀏覽:284
app英語音頻試卷掃碼怎麼聽 瀏覽:613
字元串編譯預處理 瀏覽:703
蘋果手機怎麼會顯示多個App 瀏覽:240
不去互聯網程序員 瀏覽:553
電腦qq郵箱解壓的圖片保存在哪裡 瀏覽:546
嵌入命令行 瀏覽:92
檔案為什麼被加密 瀏覽:487
十天學會單片機13 瀏覽:875
榮耀怎麼設置讓app一直運行 瀏覽:994
共享文件夾能在哪裡找到 瀏覽:435
旅遊訂旅店用什麼app 瀏覽:241
一個女程序員的聲音 瀏覽:497
魔術app怎麼用 瀏覽:340
單片機有4個8位的io口 瀏覽:898
win10rar解壓縮軟體 瀏覽:170
plc教程pdf 瀏覽:668