跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. SubForums
  3. 现代C++ | mcpp论坛
  4. 想请教一下大家构建C++模块架构是这样的吗?

想请教一下大家构建C++模块架构是这样的吗?

已定时 已固定 已锁定 已移动 现代C++ | mcpp论坛
c++模块c++20
11 帖子 3 发布者 2.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 小明小 离线
    小明小 离线
    小明
    编写于 最后由 小明 编辑
    #2

    我想构建成cppm里声明导出模块和接口,定义实现内容放在.cpp文件里:

    module;
    
    #include <BinDrivers.hxx>
    #include <BinDrivers_Marker.hxx>
    #include <BinLDrivers_Marker.hxx>
    
    export module occ_module.application_framework.tkbin;
    
    export namespace occ_module {
    using BinDrivers = ::BinDrivers;
    using BinDrivers_Marker = ::BinDrivers_Marker;
    }
    
    1 条回复 最后回复
    0
    • 小明小 离线
      小明小 离线
      小明
      编写于 最后由 编辑
      #3

      我参考了:https://github.com/mcpp-community/mcpp-style-ref

      1 条回复 最后回复
      0
      • _ 离线
        _ 离线
        __NaAlO2
        编写于 最后由 编辑
        #4

        应该没问题。不过按我的经验来看,CMake 还需要添加 set(CMAKE_CXX_SCAN_FOR_MODULES ON) ,不然会提示编译器不支持模块。

        1 条回复 最后回复
        0
        • SPeakS 离线
          SPeakS 离线
          SPeak d2learn-dev mcpp-team
          编写于 最后由 编辑
          #5

          @小明 模块文件布局没有什么问题

          module;
          
          // 全局传统头文件
          
          export module xxx; // 模块申明
          
          import xxx; 导入
          
          // 具体实现
          
          

          但是 cmake_minimum_required(VERSION 3.28) 这个版本好像太低了 而且cmake目前还是实验性支持module需要设置一个值, 我之之前有做一个视频有详细细节 可以参考

          • https://www.bilibili.com/video/BV12bT8z8Eq8

          另外, 如果想要体验模块化建议使用 mcpp 专门为模块化工程打造的构建工具 支持非常好

          • https://github.com/mcpp-community/mcpp

          我也简单做过功能介绍视频, 可以了解

          • https://www.bilibili.com/video/BV19Kjf6cEVJ
          1 条回复 最后回复
          0
          • SPeakS 离线
            SPeakS 离线
            SPeak d2learn-dev mcpp-team
            编写于 最后由 编辑
            #6

            而且 mcpp 项目 完全使用 C++23 + 模块化工程结构, 本身可以作为 真实的 模块化项目示例 进行参考

            • https://github.com/mcpp-community/mcpp
            1 条回复 最后回复
            0
            • 小明小 离线
              小明小 离线
              小明
              编写于 最后由 编辑
              #7

              @__NaAlO2 稍后我试一下,我使用 clang 编译成功了,但是msvc编译失败了。提示是找不到 STD 模块,不知道是不是这个原因。

              _ 1 条回复 最后回复
              0
              • 小明小 离线
                小明小 离线
                小明
                编写于 最后由 编辑
                #8

                @SPeak 我看cmake很多模块支持的功能都是3.28引入的,稍后我看一下。

                1 条回复 最后回复
                0
                • _ 离线
                  _ 离线
                  __NaAlO2
                  回复了小明 最后由 编辑
                  #9

                  @小明 CMake 的模块支持从 3.28 开始就有了,但 import std 直到目前最新版都还需要开启实验性支持才能用(见 https://cmake.com.cn/cmake/help/latest/prop_tgt/CXX_MODULE_STD.html )。
                  至于头文件单元(例如 import <headers.hpp>),目前似乎只有 MSVC (用 Visual Studio 的 sln/slnx 工程)才支持。

                  1 条回复 最后回复
                  0
                  • 小明小 离线
                    小明小 离线
                    小明
                    编写于 最后由 编辑
                    #10

                    @__NaAlO2 我看社区的 mcpp 也是使用LLVM,没有使用MSVC。Visual Studio + sln/slnx 估计不会考虑。

                    SPeakS 1 条回复 最后回复
                    0
                    • SPeakS 离线
                      SPeakS 离线
                      SPeak d2learn-dev mcpp-team
                      回复了小明 最后由 编辑
                      #11

                      @小明 后面有计划支持 msvc

                      1 条回复 最后回复
                      0

                      • 登录

                      • 登录或注册以进行搜索。
                      d2learn forums Powered by NodeBB
                      • 第一个帖子
                        最后一个帖子
                      0
                      • 版块
                      • 最新
                      • 标签
                      • 热门
                      • Online Tools
                      • 用户
                      • 群组