首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建没有标题的库?

如何创建没有标题的库?
EN

Stack Overflow用户
提问于 2021-07-19 14:54:34
回答 1查看 427关注 0票数 4

我们在C++20中有模块,我们能完全删除代码中的#include吗?

例如,我们可以写

代码语言:javascript
复制
import boost.asio;
...

而不是

代码语言:javascript
复制
#include <boost/asio.hpp>
...

在过去,我们需要这些步骤来安装库:

/usr/include.

  • Install

  • 将所有源(.cpp)编译为对象(.o)。

  • 将它们打包到库(.a或.so)中。

在C++20中,我们可以:

  • 编译所有源代码,但是每个源文件可以生成一个对象(.o)和一个编译模块接口(CMI)。对于gcc来说,他们让suffixes.
  • Package /usr/lib.
  • Install对象(.o)进入一个库(.a或.so).
  • Install ),将库文件放入/usr/lib.
  • Install中,CMIs进入某些路径。

但是,用CMIs发布库会带来问题:

guess).

  • Different

  • 我们没有一个特殊的文件夹来放置

  • (可能是/usr/include/c++-modules,我的

  • 编译器会产生不同的

  • )。如果我们根据B模块编译模块A,但使用不同的编译标志,那么对于开发人员来说,为他们的libraries.

  • What提供不同版本的CMIs是很糟糕的吗?一个不同的标志可能不会引起您的注意,但可能会导致潜在的错误。

这不是用CMIs替换头的好方法。那么,我们如何从C++中完全删除标头呢?

我不是在谈论标准库,因为模块化的c++标准库是在c++23中引入的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-19 22:55:16

模块不是一种二进制分发机制;您应该期望以非常的方式提供模块接口文件(即编译到库中的对象文件(这些文件不是头文件)的模块接口文件,并将CMI生成和缓存留给客户端的编译器和构建树(分别)。因此,只有在使用给定模块的第一转换单元之后,每个客户端才能实现构建速度效益。

其他共享机制很可能会在实践中出现,但重要的是,它在本质上并不比现有的构建策略更复杂或更不兼容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68442615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档