如何使用 clang 更快地编译?

问题描述 投票:0回答:1

我有一个 Visual Studio 2019 C++ 项目,我正在将其转换为 clang,我注意到,根据

-ftime-report
开关的报告,clang 版本的编译速度相当慢,平均而言,clang 需要大约 1700 毫秒来编译,而 VS2019版本只需 1150 毫秒即可编译。不涉及预编译头文件。

请注意,我是通过使用以下(最相关的)标志直接调用

clang++.exe
来直接从命令行构建 clang 版本:

-std=c++14 -g -c

VS2019版本使用以下标志:

/permissive- 
/GS 
/W3 
/Zc:wchar_t 
/Qspectre 
/Zi 
/Gm- 
/Od 
/sdl 
/Fd"x64\Debug\vc142.pdb" 
/Zc:inline 
/fp:precise 
/D "_DEBUG" 
/D "GAMECODE_EXPORTS" 
/D "_WINDOWS" 
/D "_USRDLL" 
/D "_WINDLL" 
/D "_UNICODE" 
/D "UNICODE" 
/errorReport:prompt 
/WX- 
/Zc:forScope 
/RTC1 
/Gd 
/MDd 
/std:c++14 
/FC 
/Fa"x64\Debug\" 
/EHsc 
/Fo"x64\Debug\" 
/debug
/diagnostics:column 

是什么导致了如此大的差异,使 VS2019 变得更快? MsBuild 是否做了一些特殊的事情来加速编译,而我对 clang 编译器的简单命令行调用却无法做到这一点?

c++ visual-c++ compilation clang compilation-time
1个回答
0
投票

我也遇到这个问题了。所以不是答案,而是更多数据证实了这个问题。

似乎 pch 没有什么区别(甚至 -fpch-codegen )。使用查看 -ftime-trace 的构建分析器,clang-cli 花费了大量时间来实例化模板。 pch 确实减少了解析时间。我想尝试看看 -fpch-instantiate-templates 是否有助于减少时间。

VS 2019 也被锁定为 clang v12。 VS 2022 跟踪最新的 clang v17。因此,这可能只是交付的 clang 的一个非常缓慢的构建。各种在线报告显示,从 v12 到 VS 22 v15,基准测试的执行速度提高了 2 倍或更多,现在是 VS 22 v17。

作为比较,我的 M2 Max 8/4 需要 780 秒来编译。 i9 24T 8HT/8 搭配 VS 2019 需要 6200 秒。

© www.soinside.com 2019 - 2024. All rights reserved.