参考链接:https://www.youtube.com/watch?v=eSI4wctZUto&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb&index=72
PCH全称为:Pre-compiled Header,被预先编译过的头文件,对于比较大型的工程,往往编译时间会很久,通过使用PCH,把那些不经常发生改动的头文件都预先编译出来,就可以大大节省实际使用时候的编译时间。
实际应用中,还经常把外部调用的API的头文件编译为PCH,比如调用STL、调用Windows的APIwindows.h
等等
使用PCH的缺点:会减弱文件间的关联性
举个例子,原本我有一个cpp,包含了#include <windows.h>
,然后我把这些自己不会改的api的头文件放到PCH里,那么之后我再看这个代码,我就不知道这个cpp具体包含了哪些头文件了,我只知道它用到了PCH,但是不能一眼就看出来它包含了头文件windows.h
如何在VS2017中使用pch
举个例子,我们创建一个简单的C++工程,创建三个简单的源文件,均使用一个对应的头文件,如下图所示:
代码如下所示:
===== 头文件如下 ======
#pragma once
#include<vector>
#include<map>
#include<set>
#include<string>
#include<array>
#include<stack>
#include<windows.h>
===== Source ======
#include "Header.h"
void main()
{
}
===== Source1 ======
#include "Header.h"
===== Source2 ======
#include "Header.h"
通过VS2017的tool选项中的VC++ Project Settings中设置显示build项目的时长,可以看到直接build该项目用时如下:
第一次build用时1902ms
接下来我们将该Header.h文件改成pch文件,为此,需要添加一个对应的cpp文件,用来进行pch处理,如下图所示:
再对该pch文件点击右键,选择属性,将其Precompiled Header属性设置为Create,如下图所示:
然后进入整个项目的属性界面,如下图设置对应参数:
然后我们再进行Build,这时的build时长如下所示,相较于之前的1903ms,减少了400多ms,而且这个差距会伴随着头文件引用次数的增多变得更大:
如果我们更改Main函数后进行Build,会发现用时大大减少,因为此时头文件已经被预先编译好了:
