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

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

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

先看下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

在Visual Studio (VS) 中,自定义向导可以用来生成预编译头文件(PCH),以加快编译速度预编译头文件包含了一些不经常变化的头文件,通过预编译这些头文件,可以避免在每次编译时都重新编译这些文件,从而提高编译效率。 以下是如何在VS设置自定义向导以生成预编译头文件的步骤: 1. **创建预编译头文件**: - 在你的项目中,创建一个新的头文件,通常命名为 `stdafx.h`。 - 在 `stdafx.h` 中包含所有不经常变化的头文件。 2. **创建预编译源文件**: - 创建一个新的源文件,通常命名为 `stdafx.cpp`。 - 在 `stdafx.cpp` 中包含 `stdafx.h` 文件。 3. **配置项目使用预编译头**: - 右键点击项目名称,选择“属性”。 - 在“配置属性” -> “C/C++” -> “预编译头” 中,将“预编译头设置为“使用(/Yu)”。 - 在“预编译头文件”中,输入 `stdafx.h`。 - 在 `stdafx.cpp` 文件的属性中,将“预编译头设置为“创建(/Yc)”。 4. **配置自定义向导**: - 如果你使用自定义向导来生成项目文件,确保在生成项目文件时包含上述配置。 - 你可以在自定义向导的模板文件中添加相应的配置项,以确保生成的项目文件包含预编译头设置。 以下是一个简单的示例,展示了如何在自定义向导中配置预编译头: ```xml <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">Win32</Platform> <ProjectGuid>{YOUR-PROJECT-GUID}</ProjectGuid> <OutputDir>Debug\</OutputDir> <PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile> <ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles> </PropertyGroup> <ItemGroup> <ClCompile Include="stdafx.cpp"> <PrecompiledHeader>Create</PrecompiledHeader> </ClCompile> <ClCompile Include="main.cpp"> <PrecompiledHeader>Use</PrecompiledHeader> </ClCompile> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup> <ConfigurationType>Application</ConfigurationType> <UseOfPrecompiledHeader>1</UseOfPrecompiledHeader> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ItemGroup> <ClCompile Include="stdafx.cpp" /> <ClCompile Include="main.cpp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> </Project> ``` 通过以上步骤,你可以使用自定义向导在VS中生成预编译头文件,从而提高编译速度
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值