C++ 在编译时是否支持 Global Headers?

Does C++ Support Global Headers At Compile Time?

在尝试编译外部提供的 C++ 代码库时,我遇到了一个令人困惑的问题:

header 中的几个文件丢失了 #include <MyLibrary.h>,其中 MyLibrary 是一个明显的依赖项,它只是丢失了,并且阻止了编译。

我的问题是: 编译 C++ 代码时,有没有办法自动包含依赖项 header 文件,而无需在需要它的每个 .h/.cpp 文件中 #include ?换句话说,一种为 C++ 预处理器提供 header 文件列表的方法,以便在编译所有源代码时自动包含?

我知道这可能是一个非常糟糕的主意,但我正在尝试确定我提供的代码是否只是损坏了,或者是否有某种方法可以编译它而无需手动修复每个文件缺少依赖项。

是的,至少在 gcc 和兼容的情况下是这样。: 使用 -include 选项。参见 。

C++ 语言标准不支持 "global headers",但个别编译器支持。

它被称为强制包含

对于 Visual C++,它是选项 /FI,对于 g++,它是选项 -include


然而,对于 Visual C++,包含公共 headers 的常用方法是将这些包含放在一个名为 stdafx.h 的文件中,然后在每个翻译单元中包含该文件,首先.这是 Visual C++ 预编译 header 支持的一部分。这是有问题的,因为当它打开时(在 Visual Studio 项目中默认打开)它会更改预处理规则,因此某些标准代码可能无法编译,但它可以大大加快更大的构建速度。