如何分发C++20模块?

Not*_*ult 9 c++ c++20 c++-modules

所有关于模块的文献都是最近才出现的,而我正在努力解决一个核心概念问题。

当我制作自己的模块时,在链接过程之后,是否存在打包这些模块以将它们作为库分发的常规可接受的方式?

Nic*_*las 2

从广义上讲,构建模块接口的产品(与编译的链接器产品不同,如静态/共享库)在编译器之间不可共享。至少不是为同一操作系统/平台编译库的方式。编译的模块格式是特定于编译器的,甚至在同一编译器的版本之间可能不稳定。

因此,如果您想发布使用模块构建的预编译库,那么就像非模块构建一样,您将需要发布用于使用该模块的文本文件。具体来说,您需要该库中内置的任何模块的所有接口单元。不需要给出实现单元,因为它们的产品都是库的编译形式(除非它们是接口单元包含的实现分区)。

也许将来,同一平台的编译器将标准化编译的模块格式,甚至跨平台。但在那之前,您将不得不继续使用预编译的库传送文本。