C++预编译头⽂件
⼀、
在实际项⽬开发中,当代码量以及⽂件数量达到⼀定规模时,编译项⽬往往需要耗费⽐较长的时间。此时我们可以为⼀些配置或者逻辑引⼊⼀些脚本(游戏开发中通常为lua);同时我们可以在⼯程中使⽤预编译头⽂件,即⼯程中总有那么⼀堆头⽂件是⼏乎所有cpp都必须包含的,⽽且这些头⽂件中的代码是不会经常改变的。使⽤预编译头我们便可以将这些头⽂件只编译⼀次,然后可供其他所有cpp使⽤。
⼆、
我们都知道stdafx.h这个⽂件。很多⼈都认为这是VC提供的⼀个“系统级别”的头⽂件。其实这是⼀个预编译头⽂件。这是MFC⼯程建⽴的默认预编译头。包含以下内容:
#include <afxwin.h>
#include <afxext.h>
#include <afxdisp.h>
#include <afxdtctl.h>
#include <afxcmn.h>
stdafx.cpp 中的内容:
system的头文件
#include "stdafx.h"
这些正是使⽤MFC所必须包含的头⽂件,当然我们不太可能在我们⼯程中修改这些头⽂件,所以说是稳定和不会变动的
三、
⾃⼰在实际项⽬开发中使⽤预编译头
⽐如:Uploader.h 包含了⼤量⼯程中⽤到的⾃定义头⽂件以及库⽂件
#ifndef __UPLOADER_PCH__
#define __UPLOADER_PCH__
#include "Engine.h"
#include "Engine/KG_Time.h"
#include "Engine/KGLog.h"
#include "FileSystem/IFileSystem.h"
#include "Conf/IConf.h"
#include "FileSystem/LooseFileSystem.h"
#include "libs3sdk.h"
#include <fstream>
#include <iostream>
#include <mutex>
#include <sstream>
#include <stdio.h>
#include <string>
#include <thread>
#include <vector>
#endif
Uoloader.cpp
#include "Uploader.h"
然后在Uploader.cpp属性中设置预编译头
关键字:预编译,/Yu,/Yc,/Yx
右键cpp–>属性–>C/C++–>预编译头–>使⽤预编译头
设置好项⽬属性后,编译连接会在我们项⽬中⽣成.pch后缀的⽂件,默认为项⽬名。⽣成预编译头通常是⽐较耗时的,⽽且预编译头⽂件(.pch)⽂件通常很⼤,10多MB,故及时清理那些不经常使⽤的预编译头。
使⽤预编译头技术后,虽然为编译带来了极⼤的⽅便,但也造成了⼀个问题:由于它假定预编译头中所
包含过的头⽂件会在所有的cpp中使⽤。因此编译器在编译cpp的时候,就会将预编译头中已经编译好的部分加载到内存中。所以我们的cpp必须包含预编译头,即将预编译头⽂件Uploader.h放到每⼀个cpp的开头。这样编译器才能将.pch从内存中请出去,服务于我们具体的cpp.
本⽂只讲述原理,预编译头细节使⽤请参考相关资料~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。