是否可以像使用库一样使用预编译头文件?例如,我可以创建一个包含预处理器的 header ,如下所示:

#include <iostream>
#include <string>
#include "boost_headers.hpp"

将其编译成 PCH,然后分发 PCH,而不必分发用于创建它的头文件?

最佳答案

不可以。预编译头文件具有多个方面,使其不适合作为分发格式。

  • 他们不稳定。对编译器或build设置的任何更改都会使预编译头无效。
  • 它们不是模块化的。 PCH 必须是源文件(甚至通过命令行)中包含的第一个内容。因此,您不能包含多个 PCH。换句话说,如果您将库作为 PCH 分发,您基本上是在说您的库是用户唯一需要的东西。

  • 问题是 PCH 通常(在 MSVC 和 GCC 中,Clang 略有不同)实现为内部编译器状态的简单转储。加载 PCH 意味着用 PCH 中的状态替换编译器状态。没有中间立场 - 编译器无法将 PCH 中的状态合并到它们的当前状态。

    Clang 的 PCH 实现方式不同,但仍然必须是第一件事,因为如果在 PCH 之前出现任何东西,C++ 编译模型仍然意味着 PCH 可能无效。 Clang 的模块支持基本上描述了允许合并 PCH 的更改编译模型。 (正确进行合并还涉及很多工作。)

    关于c++ - 可以像库一样使用预编译头吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28693782/

    10-13 08:23