在 Visual Studio 工程中设置 预编译头(Precompiled Headers, PCH) 是一种优化 C/C++ 项目编译速度的重要技术。它的核心思想是将一些经常被包含且很少改动的头文件预先编译好,保存下来,在后续编译过程中直接复用,而不是每次都重新解析和编译。
首先设置VisualStudio的工程属性,我的工程是HorseJs,如下图所示:
接着创建pch.h和pch.cpp文件,(放在工程里,能让上图的设置引用的到pch.h)
取名 stdafx.h 也可以,但现代VS工程更倾向于取名 pch.h
然后再设置pch.cpp的属性,如下图所示:
pch.cpp的内容很简单,就只有下面一行代码:
#include "pch.h"
pch.h的内容则是你的项目代码中经常需要引入的头文件,以下是我的pch.h文件的代码,你可以照此制作你自己的
#pragma once
#include <iostream>
#include <string>
#include <memory>
#include <unordered_map>
#include <unordered_set>
#include <set>
#include <map>
#include <stack>
#include <fstream>
#include <filesystem>
#include <functional>
#include <shared_mutex>
#include <regex>
#include <windows.h>
#include <winuser.h>
#include <windowsx.h>
#include <dwmapi.h>
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <rapidjson/stringbuffer.h>
#define WM_SECOND_INSTANCE_NOTIFY (WM_USER + 100)
#define WM_THREAD_RESULT (WM_USER + 101)
#define WM_TRAY (WM_USER + 102)
#define WM_TRAY_CREATE (WM_USER + 103)
做完这些之后,为你工程内的每个cpp文件都增加一个include引用(必须放在首行,使其成为第一个引用)
#include <pch.h>
如果你是一个新工程,那就不用担心,因为 VisualStudio 会在你创建cpp文件时,自动为你加上上面那行include代码(必须是使用VS添加的新文件)
总结一下:
- 头文件一旦预编译后,就无需每次重复解析。能显著加快编译速度。
- 所有源文件通常都会包含一些共同的头文件,如果每个 .cpp 文件都单独处理这些头文件,效率很低。使用 PCH 可以统一处理一次,其余文件直接复用,还能减少因手动编码带来的错误。