c++ - 预编译头文件是否可以用作将被静态链接的库的一部分?

标签 c++ boost stl precompiled-headers

我相信我了解有关预编译头文件的基础知识,我想不出为什么不能在库中使用预编译头文件的任何原因,但我被告知这是不可能或不应该的完成(不记得是哪个)。

我有一个项目,其中一个共享库将由多个其他共享库静态链接,我想在共享库内使用预编译头文件作为我的外部 STL/Boost 依赖项,但我不确定这是否可行。我的目标是 OS X 和 Windows 系统,对细节的常见搜索似乎更多地指向涉及 stdafx.h 的 Windows 解决方案,这让我相信使用预编译 header 通常是 Windows 的做法。

我的问题很简单:

我可以/应该在我将静态链接到其他项目的库中使用预编译 header 吗?如果不是,那么对我所有的 STL/Boost 依赖项使用便利 header 是否是一件值得追求的好事?我指的是这样的东西:

// 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"
...

编辑:我应该说明,我不希望预编译头文件与我正在编译的库以外的任何东西共享。我的问题是关于是否可以创建用于编译那个库的预编译 header 。

最佳答案

一旦完成编译,就不再使用预编译头,它们对链接阶段(包括共享库和任何其他可链接组件)也没有影响。您可以使用它来 boost 共享库的编译,但仅此而已,静态库是编译的结果,使用或不使用预编译头文件。

关于c++ - 预编译头文件是否可以用作将被静态链接的库的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23626161/

相关文章:

c++ - 如何重载 << 运算符?

c++ - 在 [现代] C++ 中通过 N 个变量进行范围/循环

c++ - std::copy 如何与流迭代器一起工作

c++ - 我还需要对 algorithm::join 使用 boost 吗?

c++ - union 而不是 aligned_storage_t 作为容器节点类型的一部分

c++ - HashMap 实现 : --- hashcode

c++ - 放大 QGraphicsScene 有时会使我的绘图消失

C++模板代码解释

c++ - 获取 boost.log 记录器的严重性..?

c++ - 使用 boost :qi 解析两个字符串 vector