在将我的项目配置为使用 PCH 后,完整编译时间减少了一半,增量构建几乎立即发生。PCH 是一种非常有效的加速编译时间的方法,我强烈推荐它。
尽管 dsharlet提到了许多重要点,但他跳过了一些我最终必须弄清楚的关键步骤。因此,这里是配置项目以使用 PCH 的完整指南:
在 VC++ 项目中开始使用 PCH
备份您的src
目录和任何其他包含源代码的目录......(如果出现任何问题,您将需要这个)
在您的项目中创建 2 个文件,Globals.cpp
然后Globals.h
..(选择任何名称但坚持使用)
右键单击Globals.cpp
并打开Properties,选择 Configuration > All configuration
转到 C/C++ | 预编译的Header,并填写:
- 预编译头文件:创建 (/Yc)
- 预编译头文件:Globals.h
打开Globals.cpp
并添加这一行,仅此而已:#include "Globals.h"
右键单击您的 VC++ 项目并打开Properties,选择 Configuration > All configurations
转到 C/C++ | 预编译的Header,并填写:
- 预编译头文件:使用 (/Yu)
- 预编译头文件:Globals.h
打开项目中的所有.h
和.cpp
文件,并将其添加到最顶部: #include "Globals.h"
打开Globals.h
并添加以下内容:(它#pragma once
在顶部非常重要)
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stddef.h>
#include <memory>
#include <string.h>
#include <limits.h>
#include <float.h>
#include <time.h>
#include <ctype.h>
#include <wchar.h>
#include <wctype.h>
#include <malloc.h>
#include <locale.h>
#include <math.h>
// Windows SDK
#define _WIN32_WINNT 0x0501 // _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>
// Windows API
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
- 这些包括是您的 PCH 文件的典型候选者
- 删除您不使用的包含
- 浏览您的项目并收集更多不经常更改的头文件
使用查找和替换,在 PCH 文件中搜索每个#include
',然后从项目中的所有.h
和.cpp
文件中删除它们。
进行完整编译并确保一切正常。以下是您将遇到的常见问题的一些解决方案:
PCH 文件包括自身:
您的 PCH 文件包含一个包含 PCH 头文件的头,从而创建了一种循环依赖。双击错误将您带到有问题的文件,然后只需删除显示的行#include "Globals.h"
未定义符号 X
虽然你所有的项目文件都可以包含 PCH 头文件,但是包含在PCH 头文件中的文件不能包含 PCH 头文件!(如上所述),因此您需要重新添加之前在文件中的所有导入。(将文件与备份版本进行比较)
找不到符号 logf
有时,全局 PCH 文件的行为不符合预期,并且会因无法解决的疯狂错误而中断编译。然后,您可以关闭单个源代码文件的 PCH。
右键单击您的.cpp
文件并打开Properties,选择 Configuration > All configurations
转到 C/C++ | 预编译的Header,并填写:
删除文件#include "Globals.h"
中的行.cpp
重新添加文件最初具有的任何导入。(将文件与备份版本进行比较)