文章目录
- c++预编译头文件
- 1.使用g++编译预编译头文件
- 2.使用visual studio进行预编译头文件
- 2.1visual studio如何设置输出预处理文件(.i文件)
- 2.2visual studio 如何设置预编译(初始创建空项目的情况下)
- 2.3 visual studio打开输出编译时间
c++预编译头文件
预编译头文件(Precompiled Header,简称PCH)
是一种提高编译速度的技术。在C++等编程语言中,每次编译程序时,编译器都需要处理所有的头文件。由于头文件通常包含大量的宏定义、类型定义和函数声明等内容,这一步骤可能会消耗较多的时间。尤其是当项目变得非常庞大且多个源文件共享相同的头文件
时,这种重复处理会显著增加整个项目的构建时间。
预编译头文件的基本思想是将一些频繁使用的头文件预先编译成一种中间形式,然后在后续的编译过程中直接使用这个已经编译好的结果,而不是每次都从头开始重新解析这些头文件。这样做可以大大减少编译时间,尤其是在大型项目中效果尤为明显
。
使用预编译头文件的好处包括
:
- 加速编译过程:减少了对常用头文件内容的重复解析。
- 提高开发效率:更快的编译反馈循环可以让开发者更高效地工作。
- 资源节约:降低了CPU和内存的使用量。
如何使用预编译头文件
不同IDE或编译环境对于预编译头文件的支持方式可能有所不同。以下是一些常见的设置方法:
- Visual Studio (VS): 在VS中,可以通过项目属性来指定一个特定的头文件作为预编译头。一般需要创建一个专门用于预编译的头文件(例如
stdafx.h
),并在项目设置里指定该文件为预编译头文件。同时,还需要在源代码文件顶部加入#include "stdafx.h"
作为第一个包含指令。 - GCC/Clang: 这些编译器通过命令行选项支持预编译头文件。例如,使用
-Winvalid-pch
来生成预编译头文件,然后用-include
选项指定要包含的预编译头文件。 - Xcode: Xcode也支持预编译头文件,并且可以通过项目的Build Settings进行配置。
需要注意的是,虽然预编译头文件能够显著提升编译速度,但不恰当地使用也可能导致问题,比如增加了编译器之间的依赖性,或者使得某些编译错误难以定位。因此,在实际应用中应当根据项目实际情况合理选择是否以及如何使用这项技术。
下方两个文件其实是等价的
- 上图中下方代码
分离
出我们需要的头文件单独到一个文件
中,方便我们进行头文件预编译
1.使用g++编译预编译头文件
分别测试第一次编译,再修改部分代码进行第二次编译,两次编译时间如下
:
直接对分离出的
pch.h文件进行编译,我们一般对cpp文件编译,但对头文件编译
就会生成下方截图所示文件。
将之前生成的exe文件删除,重新对main.cpp进行编译
,分别测第一次编译时间,然后修改部分代码再次重新编译第二次,我们发现两次时间都大大减少。
2.使用visual studio进行预编译头文件
2.1visual studio如何设置输出预处理文件(.i文件)
- 右击项目,设置属性
- 选择预处理器,将预处理到文件改为是
- 这样运行的程序文件下就会出现.i文件,打开.i预处理文件,如下,
可见加入的那些头文件代码量之多
,这些都要重新编译(如果不进行预编译头文件的话)
2.2visual studio 如何设置预编译(初始创建空项目的情况下)
- 进行预编译:
- 创建
pch.cpp
,引入pch.h文件,右击cpp文件选中属性:
- 创建
- 选择预编译头,改为
创建
。
- 再右击项目属性,设置项目属性。
选择使用预编译头,并且选择预编译头文件
2.3 visual studio打开输出编译时间
- 选择工具,打开选项。
- 找到vc++ 项目设置,把生成计时改为是。
- 一开始项目设置属性预编译头为不使用预编译头的情况:
- 第一次编译:
改代码后第二次编译情况如下
:
- 将项目属性设置为使用预编译头后:
- 第一次编译情况如下:(跟不使用的差不多)
- 改写部分代码后第二次进行编译,情况如下:(第二次时间大大减少)