预编译头文件是被很多编译器用来编译稳定的代码以及将编译好的稳定代码存储在二进制文件中用于提升编译性能。在随后的编译中,编译器将加载存储状态继续编译指定的文件。每一个随后的编译将更快,因为稳定的代码不需要再次编译。(译者注:本文为QtDoc 5.0:Using Precompiled Headers的译文)
添加预编译头文件到你的工程
-
qmake在一些平台支持使用预编译头文件(PCH,PreCompiled Headers)以及构建环境,包括:
Windows nmake
Visual Studio projects (VS 2008 and later)
Mac OS X Makefile
Xcode
Unix GCC 3.4 and above
-
预编译头文件包含哪些内容
预编译头文件应该将稳定和静态(译者注:例如,Qt库头文件、第三方库头文件、自定义的不经常改动的头文件)的代码包含在你工程中。一个典型的PCH文件类似如下:
-
例如: stable.h
// Add C includes here
// ------ C includes------
#if defined __cplusplus
// Add C++ includes here
#include <stdlib>
#include <iostream>
#include <vector>
#include <QApplication>
// Qt includes
#include <QPushButton>
#include <QLabel>
#include "thirdparty/include/libmain.h"
#include "my_stable_class.h"
...
#endif
注意:预编译头文件要将C和C++头文件分开,因为预编译头文件用于C文件不包含C++代码。
END
工程选项
-
让你的工程使用PCH,你仅仅需要在工程文件中定义PRECOMPILED_HEADER变量:
PRECOMPILED_HEADER = stable.h
qmake将会处理剩下的工作——确保创建和使用预编译头文件。你不需要包含预编译头文件到HEADERS变量中,如果配置了支持PCH,qmake会帮助你完成这些。
-
所有支持预编译头文件的平台有precompile_header选项可以设置。当你使用PCH时,使用这个选项可用于触发工程文件中添加了设置的条件块:
precompile_header:!isEmpty(PRECOMPILED_HEADER) {
DEFINES += USING_DEBUG
}
END