c++ - 如何在 CMake 中使用 c++20 模块?

标签 c++ cmake c++20 c++-modules

ClangMSVC已经支持Modules TS来自未完成的 C++20 标准。
我可以使用 CMake 或其他构建系统构建基于模块的项目吗?如何构建?

我试过build2 ,它支持模块并且效果很好,但是我有一个question关于它的依赖管理(UPD:问题已关闭)。

最佳答案

CMake 目前不支持 C++20 模块。
另见 the relevant issue in the CMake issue tracker .请注意,与插入新的编译器选项相比,支持模块需要来自构建系统的更多支持。它从根本上改变了在构建过程中必须如何处理源文件之间的依赖关系:在预模块世界中,所有 cpp 源文件都可以以任何顺序独立构建。对于不再适用的模块,这不仅对 CMake 本身有影响,而且对下游构建系统也有影响。
看看CMake Fortran modules paper血淋淋的细节。从构建系统的角度来看,Fortran 模块的行为与 C++20 模块非常相似。
更新: CMake 3.20 引入了对带有 Ninja Generator 的模块的实验性支持(并且仅适用于 Ninja)。详情可查看respective pull request .在现阶段,此功能仍处于高度试验阶段,不适合生产使用。如果你打算玩这个,你真的应该阅读 Fortran modules paperdependency format paper了解你正在进入什么。

关于c++ - 如何在 CMake 中使用 c++20 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57300495/

相关文章:

c++ - std::vector 的 push_back() 导致奇怪的编译时错误消息

c++ - 每次我添加新的源子文件夹时,Cmake 都会重新编译所有内容

c++ - 从通过 boost::asio::co_spawn 启动的协同例程返回一个值

c++ - DbgHelp.dll 是 Windows 内置的吗?我可以相信它在那里吗?

c++ - C++ lambdas 是真正的闭包吗?通过引用捕获

C++:奇怪的 vector 行为

c++ - 使用 clang 和 gfortran 编译

c++ - CMake,选择Xcode编译器

c++ - 关于 C++ 20 模块的困惑

C++20:[[likely]]、[[unlikely]] 和 __builtin_expect 之间的区别?