Visual Studio 预编译的头文件基于一个头文件,包括所有应该预编译的文件,通常包括很少更改的头文件,例如标准库的东西。它连接到在设置中设置为“生成预编译头”的stdafx.cpp,它只包括stdafx.h。
然后,Visual Studio 会强制所有文件包含 stdafx.h 作为其第一个预处理器定义,以避免在它之前包含头文件或更改影响 stdafx.h 解析的 #define 宏出现问题。
我认为将此行为映射到 g++ 的最简单方法是使其仅预编译 stdafx.h 并正常包含其他标头。这将类似于您在 Visual c++ 中所做的。您还可以将 stdafx 重命名为不那么愚蠢的名称,例如“precompiled_.h”或其他名称。很容易将 Visual Studio 设置为使用此文件。
我已经使用 g++ 的 make 文件实现了这种系统,它提供了一些性能,但我没有设法获得与 Visual Studio 中的预编译头文件相同的性能提升。这是一段时间以前的事了,从那时起 g++ 可能会有所改进。我已经设法让 CMake 生成带有预编译头文件的 Visual Studio 项目,我还没有尝试过它的 Makefile 生成,但应该没问题。
Visual Studio 有一些其他技巧可以提高编译速度。一种是在一批中编译许多具有相同设置的 cpp 文件。这可以使用通常称为统一构建系统的方式手动完成,在该系统中,您将多个 cpp 文件包含到一个文件中并一次性构建它,从而节省了头解析和磁盘 io。