一般规则

不要删除 pch.h/.cpp;不要修改 pch.cpp;在其它 .cpp 中首先 #include “pch.h”

解释

预编译头,把一个基本不改变的头文件,编译成类似库的一个中间件,然后其他编译单元编译时就不需要去解析编译那个头文件了,而是直接把这个中间件加进去,从而显著提高编译速度。即以加速对不常修改的头文件(通常是基础库)的编译

作用

提高编译速度

预编译头文件

在我们使用第三方库文件的时候,或者调用动态库文件(dll、a),经常是需要包含头文件的,而且这些头文件特别多,如果每次其他文件改变后都需要对这些文件再次编译那就非常慢了,这里就使用预编译可以解决此问题。

手动设置预编译头文件

新建一个.h头文件和.cpp文件,名字自己随便起。假设是stdafx.cpp和 stdafx.h

在新建的stdafx.cpp文件中包含这个头文件。#include “stdafx.h”

将这个stdafx.cpp 设置为预编译头

stdafx.cpp则为stdafx.h提供了编译的载体,因为C/C++只能对源文件编译,而不能对头文件编译。stdafx.cpp只需要包含stdafx.h即可。右击文件stdafx.cpp属性,注意不是项目的属性,一定要右击stdafx.cpp文件的属性,我们需要通过stdafx.cpp为创建的预编译头。stdafx.app Property Pages -> Configuration Properties -> C/C++ -> Precompiled Headers -> Precompiled Header -> Create (/Yc)。完成该设置后,只要编译stdafx.cpp,就会生成预编译结果,也就是.pch文件,只要stdafx.cpp文件没有修改,就不会再次编译,通过这个设置可以极大的提高编译效率。

日志文件夹

使用预编译结果

设置了生成预编译结果之后,还需要设置使用预编译结果。右击项目属性,Project -> Property Pages -> Configuration Properties -> C/C++ -> Precompiled Headers -> Precompiled Header -> Use (/Yu)。 设置“预编译头文件”选项的值为“stdafx.h”。

日志文件夹

源文件中包含预编译头文件

需要在所有的源文件中包含预编译头文件,并且该文件必须是第一个包含的。这是使用预编译头的硬性规定,假如不遵守这个规定,编译会失败。当然,也可以强制编译器为每个cpp文件自动添加stdafx.h。Project -> Property Pages -> Configuration Properties -> C/C++ -> Advanced -> Forced Include File -> stdafx.h

日志文件夹

头文件

对于头文件,通常情况下在.cpp文件中引用依赖的头文件,头文件中可以不需要引用依赖的头文件,此时需要确保.cpp中同时引用头文件和依赖的头文件,只要满足合格条件,Visual Studio IDE就能识别.h中用到的依赖类。如果是在另一个.cpp文件中引用依赖的头文件,而当前.cpp中没有引用,则Visual Studio IDE是不能识别的,会在写代码时就报错。所以只需要在.cpp中确认.h和依赖的.h文件都有效,那么写代码时,就能自动识别所引用的类。但是满足这个条件并不能保证编译就能通过,如果要编译通过,还需要确保依赖的.h文件在当前.h文件前面,也就是说,如果在.cpp文件中先引用当前.h文件,再引用依赖的文件,虽然IDE可以识别,但是因为在编译.h文件时,还没有运行到依赖的.h头文件,会触发没有定义依赖的类编译错误。