如何分析并调试Visual Studio构建过程,解决构建速度过慢问题
Visual Studio编译ORB_SLAM2耗时过长排查与优化方案
第一步:定位耗时原因
- 调高MSBuild日志输出级别:打开VS的「工具」-「选项」-「项目和解决方案」-「生成并运行」,将「MSBuild项目生成输出详细程度」从默认的「最小」调整为「详细」或「诊断」,重新构建后即可在输出窗口查看每个编译单元、每个构建步骤的耗时,精准定位卡顿点,比如头文件重复展开、预编译头未生效、自定义构建步骤异常等。
- 检查并行编译配置:首先在上述「生成并运行」设置页,将「最大并行项目生成数」设置为与设备CPU核心数相等的值;其次检查CMake生成的VS项目是否添加了
/MP编译参数,该参数控制MSVC多进程编译同项目下的多个源文件,多数跨平台CMake项目默认不会为MSVC添加该配置。 - 排查增量构建与外部拦截问题:Windows Defender实时保护是Windows环境下编译变慢的最常见诱因,编译过程中Defender会扫描所有生成的
.obj、.lib、.dll文件,大幅拖慢速度,可尝试将项目目录、VS编译临时输出目录加入Defender排除列表后重新测试。同时检查是否有其他安全软件、文件同步工具正在读写项目目录,导致编译IO卡顿。
第二步:针对性优化
- 启用预编译头(PCH):ORB_SLAM2重度依赖Eigen、OpenCV等第三方库的头文件,MSVC下预编译头的优化效果非常显著,可修改项目
CMakeLists.txt,针对MSVC编译器添加预编译头配置,将常用的第三方库头文件加入预编译列表。 - 添加MSVC专属编译参数:在
CMakeLists.txt中针对MSVC添加以下编译选项:/MP:开启多进程编译,利用多核CPU资源同时编译多个源文件- 关闭不必要的编译警告:MSVC默认开启的大量警告会增加编译分析开销,可根据需求关闭不需要的警告项
- Debug模式下添加
/Zo参数:在不影响调试体验的前提下降低编译开销
- 关闭冗余Debug功能:如果是Debug模式编译,可在项目属性「C/C++」-「常规」中关闭「支持编辑并继续」功能,该功能会大幅增加编译耗时;同时可根据使用需求关闭增量链接,减少IO开销。
- 优化头文件依赖:MSVC对头文件递归展开的处理效率远低于GCC,可通过添加类前置声明、减少不必要的头文件嵌套引入,降低头文件展开开销,大幅提升编译速度。
内容的提问来源于stack exchange,提问作者jiggy
相关产品推荐
相关产品推荐

