是否可以使用像编译库一样的预编译头?例如,我可以创建一个包含预处理器的头,如下所示:
#include <iostream>
#include <string>
#include "boost_headers.hpp"
将其编译成PCH然后分发PCH而不必分发用于创建它的头文件?
答案 0 :(得分:5)
没有。预编译头文件有多个方面,使它们不适合作为分发格式。
问题是PCH通常(在MSVC和GCC中,Clang略有不同)实现为内部编译器状态的简单转储。加载PCH意味着用PCH中的状态替换编译器状态。没有中间立场 - 编制者无法将PCH的状态合并到当前状态。
Clang的PCH实现方式不同,但仍然必须是第一件事,因为如果PCH之前有任何事情,C ++编译模型仍然意味着PCH可能无效。 Clang的模块支持基本上描述了一个允许合并PCH的改变的编译模型。 (正确地进行合并还涉及很多工作。)
答案 1 :(得分:3)
没有。预编译头只能由创建它们的编译器使用。对于GCC来说,它甚至可以使用相同的二进制文件。