我相信我理解有关预编译头文件的基础知识,我无法想到为什么预编译头文件无法在库中使用,但我被告知它不可能或不应该完成(不记得哪个)。
我有一个项目,其中共享库将由多个其他人静态链接,我想在共享库中使用预编译头来获取外部STL / Boost依赖项,但我不确定它是否可行。我的目标是OS X和Windows系统,常见的搜索细节似乎更多地指向涉及stdafx.h
的Windows解决方案,这使我相信使用预编译的头文件通常是Windows实践。
我的问题很简单:
我可以/应该在库中使用预编译的头文件,我将静态链接到其他项目吗?如果不是,那么使用便利标头,比如说,我的所有STL / Boost依赖项都是一件好事吗?我指的是这样的事情:
// common.h
#pragma once
#include <boost/this>
#include <boost/that>
#include <string>
#include <vector>
#include <other_stl_header>
// Foo.h
#include "common.h"
class Foo { ... }
// Foo.cpp
#include "Foo.h"
...
答案 0 :(得分:2)
完成编译后,不再使用预编译头,它们对链接阶段(包括共享库和任何其他可链接组件)没有影响。您可以使用它来加速共享库的编译,但就是这样,静态库是编译的结果,有或没有预先使用的头文件使用。
答案 1 :(得分:1)
预编译头不是可执行文件或任何类型的可链接格式。编译器本身可以为预编译的haeder定义任何类型的格式。也许它只是简单的标记化,也许其他一些包含和其他包含的定义已经被评估。预编译头的唯一目的是加快编译器的速度。
gcc也会按需使用预编译的标头,但使用此功能并不常见。 gcc为预编译阶段的输出生成.gch
个文件。
您问题的简单答案:否