想请教一下大家构建C++模块架构是这样的吗?
-
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() -
我想构建成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; } -
-
@小明 模块文件布局没有什么问题
module; // 全局传统头文件 export module xxx; // 模块申明 import xxx; 导入 // 具体实现但是 cmake_minimum_required(VERSION 3.28) 这个版本好像太低了 而且cmake目前还是实验性支持module需要设置一个值, 我之之前有做一个视频有详细细节 可以参考
另外, 如果想要体验模块化建议使用 mcpp 专门为模块化工程打造的构建工具 支持非常好
我也简单做过功能介绍视频, 可以了解
-
而且 mcpp 项目 完全使用 C++23 + 模块化工程结构, 本身可以作为 真实的 模块化项目示例 进行参考