c++预编译头文件

1,预编译头文件是个啥?

根本上来说,他是个头文件和cpp文件的合体,cpp文件中的内容是宏定义和:include ”xxx.h"

2,为啥要用预编译头文件?

c++头文件是不编译的,只是用来做声明用,按照cpp来编译,所有的cpp都分别一个一个编译好以后再链接起来,include进来的头文件做了什么呢?比如,include <windows.h>,它就是把windows.h里所有的代码都include到cpp上include所在的位置,然后整个cpp进行编译,假设项目中只有一个cpp问题不大,但是如果有十几个cpp,都需要window.h,那么window.h内的代码需要复制粘贴编译十几遍,会导致项目编译慢,但是如果,把几个常用的头文件单独放在一个头文件中,先把它编译好了,再去不同的cpp中编译其他的部分,这样编译速度就快了。

常见的预编译头文件:“stdafx.h”,“pch.h”

3,预编译头文件怎么用?

a,首先你要知道你的项目中每个cpp都会include的头,比如,我项目中,每个cpp都用到了window.h和opencv.h,这样我把这俩h文件抽出来,单独建立一个h文件,内容大约是这样的

pch.h

#ifndef PCH
#define PCH

#include<window.h>
#include<opencv/opencv.h>

#endif //PCH

然后我还要建立一个cpp,cpp里啥都不放,就这样

pch.cpp

#include "pch.h"

这样单独把pch.cpp编译成一个包,其他的包如果需要头文件就直接链过来就行了,而不是每次都自己编一遍。

b,如果是使用vs开发,还需要在项目属性--c++--预编译头中先创建,再使用一次预编译头文件,如果是ubuntu开发,g++也支持这个功能,目前没详细研究。自行搜索吧。

可参考:感谢原作者

4,练习创建预编译头文件

1,首先创建一个空项目,项目内添加头文件pch.h,源文件pch.cpp,main.cpp,像这样:

pch.h的内容:

#pragma once
#ifndef PCH    //宏定义,防止重复引用
#define PCH

#include<iostream>
#endif

pch.cpp的内容,注意,#include "pch.h"必须放在第一个引用,而且所有的cpp必须都引用:

#include"pch.h"

2,点击vs上的:项目--属性--预编译头--选择创建预编译头--输入pch.h,像下图这样

选择:生成--生成重新生成解决方案

3,刚刚只是生成了一下.pch的预编译文件,接下来,是使用生成的pch预编译头文件。

右击源文件pch.cpp---属性----预编译头文件---选择创建

右击源文件main.cpp---属性----预编译头文件----选择使用

vs菜单栏的设置,此设置应用于整个项目:项目---属性---预编译头文件---选择使用,然后点击高级----强制包含文件----输入pch.h

点击生成--生成解决方案,就可以跑起来代码了。

注意,除了整个项目,不同的cpp文件也有预编译头属性,除了pch.cpp的预编译头属性为创建,其他的都是使用。别错了哦。不然会报错:无法覆盖在创建对象文件*.obj的预编译头过程中形成的信息。

posted @ 2020-02-06 11:07  0点0度  阅读(799)  评论(0编辑  收藏  举报