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

D2Learn Forums

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

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

已定时 已固定 已锁定 已移动 现代C++ | mcpp论坛
c++模块c++20
8 帖子 3 发布者 115 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 小明小 离线
    小明小 离线
    小明
    编写于 最后由 编辑
    #1
    cmake_minimum_required(VERSION 3.28)
    
    project(occ_module
        LANGUAGES CXX 
        VERSION 8.0.0
    )
    
    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_CXX_STANDARD_REQUIRED true)
    
    find_package(OpenCASCADE CONFIG REQUIRED)
    
    add_library(occ_module)
    target_link_libraries(occ_module PUBLIC 
        ${OpenCASCADE_LIBRARIES}
    )
    
    file(GLOB mfiles source/cppm/*/*.cppm source/cppm/*.cppm)
    file(GLOB sfiles "source/src/*/*.cpp" source/src/*.cpp)
    target_sources(occ_module 
    PUBLIC 
        FILE_SET occ_module_m
            TYPE CXX_MODULES
                FILES ${mfiles}
    PRIVATE 
        ${sfiles}
    )
    
    install(TARGETS occ_module 
        EXPORT occ_moduleTargets DESTINATION lib 
        FILE_SET occ_module_m
    )
    install(EXPORT occ_moduleTargets 
        NAMESPACE occ_module::
        DESTINATION lib/cmake/occ_module
    )
    include (CMakePackageConfigHelpers)
    configure_package_config_file(
        "cmake/config.cmake.in"
        ${CMAKE_CURRENT_BINARY_DIR}/occ_moduleConfig.cmake
        INSTALL_DESTINATION lib/cmake/occ_module
    )
    write_basic_package_version_file(
        ${CMAKE_CURRENT_BINARY_DIR}/occ_moduleConfigVersion.cmake
        VERSION ${PROJECT_VERSION}
        COMPATIBILITY SameMajorVersion
    )
    install(FILES 
        ${CMAKE_CURRENT_BINARY_DIR}/occ_moduleConfig.cmake 
        ${CMAKE_CURRENT_BINARY_DIR}/occ_moduleConfigVersion.cmake 
        DESTINATION lib/occ_module
    )
    
    find_package(Boost CONFIG REQUIRED unit_test_framework)
    enable_testing()
    file(GLOB tfiles tests/*.cpp)
    foreach (f ${tfiles})
    get_filename_component(e ${f} NAME)
    string(REPLACE ".cpp" "" e ${e})
    add_executable(${e} ${f})
    target_link_libraries(${e} PRIVATE 
        occ_module
        Boost::unit_test_framework
    )
    
    add_test(NAME ${e} COMMAND ${e})
    endforeach()
    
    1 条回复 最后回复
    0
    • 小明小 离线
      小明小 离线
      小明
      编写于 最后由 小明 编辑
      #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

                  • 登录

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