Clang 和 MSVC 已经支持来自未完成的 C++20 标准的 模块 TS 。我可以使用 CMake 或其他构建系统构建基于模块的项目吗?如何构建?
我尝试了 build2 ,它支持模块并且运行良好,但我对它的依赖管理有 疑问(UPD:问题已关闭)。
原文由 Blaze 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
CMake 目前不支持 C++20 模块。
另请参阅 CMake 问题跟踪器中的相关问题。请注意,与插入新的编译器选项相比,支持模块需要来自构建系统的更多支持。它从根本上改变了在构建过程中必须如何处理源文件之间的依赖关系:在预模块世界中,所有 cpp 源文件都可以以任何顺序独立构建。对于不再适用的模块,这不仅对 CMake 本身有影响,而且对下游构建系统也有影响。
查看 CMake Fortran 模块文件 以了解详细信息。从构建系统的角度来看,Fortran 模块的行为与 C++20 模块非常相似。
更新: CMake 3.20 引入了对带有 Ninja Generator 的模块的实验性支持(并且 仅 适用于 Ninja)。可以在 相应的拉取请求 中找到详细信息。在现阶段,此功能仍处于高度试验阶段, 不 适合生产使用。如果你打算玩这个,你真的应该阅读 Fortran 模块文件 和 依赖格式文件,以了解你正在进入的内容。