有没有办法让 G++/clang++ 的编译时间和 MSVC 一样快?
Is there a way to make G++/clang++ compile times as fast as MSVC?
对于我的测试,我需要编译几千个 C++ 文件,这些文件有很多共同的代码。因为并非所有编译器都符合(或更宽松),所以我在 windows 和 linux.
上使用 g++、clang++ 和 msvc 执行所有测试
为了缩短编译时间,我使用已经预编译的 headers 作为通用代码。此外,我编写了一个小型预处理器应用程序以允许“统一构建”(将 *.cpp 文件组合成一个 *.cpp 文件)。
目前我得到以下编译时间(随机测试用例):
- 带 PCH 的 MSVC:0.573 秒
- 没有 PCH 的 MSVC:5.367 秒
(约10次)
- 使用 PCH 的 Clang:5.221 秒
- 没有 PCH 的 Clang:7.225 秒
(约1.4倍)
- 带 PCH 的 G++:3.099 秒
- 没有 PCH 的 G++:5.826 秒
(约1.9倍)
不幸的是,我的代码包含很多模板/模板实例化,它们似乎只“保存”在 Microsoft PCH 中。
你知道有什么方法可以使 g++ 和 clang++ 的编译时间相似吗?您对如何改进我的编译时间有什么建议吗?
在这里您可以看到 chrome/clang 跟踪(-ftime-trace 和 pch):
至少在当前的 clang 主干中,我看到结合模板和预编译头文件/模块在改进编译时间方面取得了一些显着进步。
也许 gcc 实现了类似的东西 - 我们将拭目以待。
但感谢您的评论。
对于我的测试,我需要编译几千个 C++ 文件,这些文件有很多共同的代码。因为并非所有编译器都符合(或更宽松),所以我在 windows 和 linux.
上使用 g++、clang++ 和 msvc 执行所有测试为了缩短编译时间,我使用已经预编译的 headers 作为通用代码。此外,我编写了一个小型预处理器应用程序以允许“统一构建”(将 *.cpp 文件组合成一个 *.cpp 文件)。
目前我得到以下编译时间(随机测试用例):
- 带 PCH 的 MSVC:0.573 秒
- 没有 PCH 的 MSVC:5.367 秒
(约10次)
- 使用 PCH 的 Clang:5.221 秒
- 没有 PCH 的 Clang:7.225 秒
(约1.4倍)
- 带 PCH 的 G++:3.099 秒
- 没有 PCH 的 G++:5.826 秒
(约1.9倍)
不幸的是,我的代码包含很多模板/模板实例化,它们似乎只“保存”在 Microsoft PCH 中。
你知道有什么方法可以使 g++ 和 clang++ 的编译时间相似吗?您对如何改进我的编译时间有什么建议吗?
在这里您可以看到 chrome/clang 跟踪(-ftime-trace 和 pch):
至少在当前的 clang 主干中,我看到结合模板和预编译头文件/模块在改进编译时间方面取得了一些显着进步。
也许 gcc 实现了类似的东西 - 我们将拭目以待。 但感谢您的评论。