3

我想知道其他人在 C++ 中实现跨平台(linux 和 windows)预编译头文件的经历。我正在考虑 Visual Studio 允许您使用 stdafx.h 文件做什么,这些文件可以通过预编译全面使用的通用头文件(std/boost/etc 头文件)来显着缩短大量 C++ 代码的编译时间。有没有办法通过某种框架或其他东西跨平台实现这一点?

你有过什么样的经历?

编辑

我并不是真的要分享实际生成的 pch,我更感兴趣的是可以生成 pch 的框架,以及在特定平台上编译时的等价物,比如 gcc。

4

3 回答 3

4

gcc如果您传递头文件而不是实现文件,将自动预编译头文件。-x如果它试图生成目标代码,只需添加开关。GCC 总是会.gch在头文件之前查找文件,所以使用起来很简单。此页面有更多信息。将其添加到您Makefile的自动化过程中。

于 2009-02-19T23:23:38.050 回答
3

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。

于 2009-02-19T15:08:18.413 回答
1

如果您的意思是在平台之间移植预编译的头文件数据库(.pch 或其他),那么这是不可能的,因为头文件在不同的平台上会有不同的内容。

于 2009-02-19T14:55:03.857 回答