导航:首页 > 源码编译 > 编译器用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多少相关的资料

热点内容
前端录制文件如何上传服务器 浏览:534
雅黑pdf 浏览:454
python使用领域 浏览:877
买兰博基尼用什么app 浏览:135
android关闭后台运行 浏览:505
python输出路径为超链接 浏览:531
caxa为什么没有加密锁 浏览:792
服务器怎么设置才能用IP访问 浏览:663
邮件附件加密后打开能显示吗 浏览:723
荣耀x10拍照算法 浏览:569
androidgradle配置签名 浏览:96
文件夹左边的空心三角符号是什么 浏览:285
app英语音频试卷扫码怎么听 浏览:613
字符串编译预处理 浏览:704
苹果手机怎么会显示多个App 浏览:241
不去互联网程序员 浏览:553
电脑qq邮箱解压的图片保存在哪里 浏览:548
嵌入命令行 浏览:94
档案为什么被加密 浏览:487
十天学会单片机13 浏览:876