C++中是否有跨平台的预编译头文件框架/方法?

3
我想了解其他人在实现C++跨平台(Linux和Windows)预编译头文件时的经验。我考虑使用类似于Visual Studio中stdafx.h文件的方法,通过预编译通用头文件(std/boost等头文件)来大幅提高大量C++代码的编译速度。是否有一种跨平台的方式可以使用某种框架或其他工具来实现这一目标?
你尝试过这样做吗?
编辑
我并不是真正意味着共享实际结果的pch,我更感兴趣的是能够生成pch的框架以及在特定平台上编译时的等效物(例如gcc)。
3个回答

4
若使用头文件而非实现文件,则gcc会自动预编译头文件。如果尝试生成目标代码,请简单地添加-x开关。GCC将始终在头文件之前查找.gch文件,因此很容易使用。这个页面提供更多信息。将其添加到Makefile中以自动化该过程。

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

发现发布了这个答案后我有点跑题了,但还是保留下来,说不定会对某些人有用 :) - Laserallan

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接