在VS中设置预编译头从而提高编译速度

本文介绍了一种在Visual Studio中通过设置预编译头来显著提升编译速度的方法。适用于那些包含大量头文件且改动较少的项目。通过具体实例展示了如何配置预编译头,并解释了其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实这种方法在之前工作的时候也碰到过,今天写程序时发现每次修改后再编译的速度很慢,让人崩溃!于是采用设置预编译头的方法,结果编译速度大幅提高!本文通过我这次的程序实例讲解这种方法。

先看下VS中工程的文件结构


其中common.h文件中内容为:

#ifndef _COMMON_H_
#define _COMMON_H_

#include <pcl/ModelCoefficients.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/segmentation/extract_clusters.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>

using namespace pcl;
#endif    // _COMMON_H_


common.h文件中主要是包含一些PCL工程的头文件,这些头文件是很大的,common.h文件很少需要修改且被众多的源文件include。这三个条件很重要,因为本文介绍的方法的有效性就是基于这三个条件。在工程segment_plane中,每个.cpp和.h文件都包含common.h文件。

倘若不设置预编译头的话,编译很慢,每次修改后在编译也很慢。原因后面解释,下面介绍其设置方法:

  • 在工程配置属性中设置“使用预编译头文件”


  • 设置“创建预编译头文件”
在【解决方案资源管理器】中右键precompile.cpp文件,在属性页中设置创建预编译头文件

你可能觉得这个文件命名方式有点奇怪,其实这个文件没什么实际内容,仅仅是创建预编译头文件用的,这个文件几乎不会被改动!precompile.cpp的文件内容如下:
// 该文件仅仅用于创建预编译头 [4/17/2014 pc]
#include "common.h"
#include "typesdef.h"

通过以上两部设置之后,编译就变得非常快了。这是为什么呢?
我们知道在编译之前有个编译预处理过程,这个过程中会将所有的头文件的内容复制到源文件中,普通的头文件复制也没什么,但是正如之前所说,这些头文件内容很多,那么复制头文件内容所花时间就很大了。而采用设置预编译头的方法编译时间就会大幅缩小,这是因为编译器会先编译precompile.cpp,生成一个precompile.pch文件,之后编译其他.cpp文件就会直接使用precompile.pch中的内容,这样就避免了大量的复制,从而大幅缩短编译时间。

注意设置预编译头后,编译时可能会出现:
error C3859: 超过了PCH的虚拟内存范围;请使用“-Zm33”或更大的命令行选项重新编译
这是因为头文件过多,内容过大造成的,解决方案可以参考:http://blog.youkuaiyun.com/huang_xw/article/details/7898098

微软对这个的设置可以参考: http://msdn.microsoft.com/zh-cn/library/7zc28563(v=vs.100).aspx

### 如何提高ESP32编译速度 #### 使用增量构建 对于大型项目,完全重新编译整个项目会消耗大量时间。通过配置IDE或命令行工具来支持增量构建,仅编译更改后的源文件及其依赖项,可以显著减少编译所需的时间[^3]。 #### 并行化编译过程 利用多核处理器的优势,在Makefile或其他构建系统中启用并行作业选项(如`make -jN`中的`-j`参数设置为CPU核心数)。这允许同时处理多个目标,从而加快整体进度。 #### 减少调试信息量 如果不需要详细的调试符号,则可以在编译器标志里去掉生成这些额外信息的选项(比如GCC里的`-g`标记),因为它们增加了最终二进制文件大小同时也拖了链接阶段的速度。 #### 优化预处理器操作 宏定义过多会影响解析效率;尽量简化头文件包含关系,避免不必要的重复引入相同的内容;考虑采用前置声明代替完整的类定义等方式降低复杂度。 #### 更新至最新版本的工具链 Espressif官方持续改进其软件开发套件(SDK),新发布的版本通常包含了性能上的增强以及错误修复。确保使用的是最新的ESP-IDF版本可以帮助获得更好的兼容性和更快的操作体验[^1]。 ```bash # 安装最新版 IDF pip install --upgrade idf-tools ``` #### 调整缓存策略 合理运用对象文件和中间产物的本地磁盘缓存机制,防止每次构建都要从零开始创建同样的资源。某些情况下还可以借助分布式构建服务器分担工作负载。 #### 利用交叉编译环境特性 针对特定平台定制化的调整也可以带来意想不到的效果,例如选择更高效的指令集架构或者微调内联函数阈值等编译期优化措施[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值