You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何组织共用公共文件的C++后端、GUI项目的仓库与目录结构?

C++多模块项目仓库与结构规划方案

一、仓库选择建议

你因为CMake单项目不支持多编译器必须拆分独立CMake项目,不需要强制拆分Git仓库,优先推荐单仓库多独立子项目方案,仅在有独立发版、分权限管控需求时才拆分多仓库。

单仓库多子项目方案(优先)

  • 目录结构规划:
    项目根目录/
    ├── backend/       # 原有后端独立CMake项目
    ├── gui/           # 新建GUI独立CMake项目
    └── common/        # 公共库、公共头文件,本身为独立CMake库项目
    
  • 编译器适配:backend和gui是完全独立的CMake项目,可分别配置不同编译器,CLion支持单仓库内加载多个独立CMake项目,也可以分别打开子目录作为项目根目录配置编译链,完全满足你的要求
  • 公共文件共享:common作为独立CMake静态/接口库,backend和gui的CMakeLists.txt直接引入即可,无需额外同步操作,公共代码修改实时生效,没有多仓库版本同步的冗余成本

多独立仓库方案(按需选择)

如果需要两个模块独立发版、单独维护权限,再按这个方案实现:

  • 新建三个独立Git仓库:后端仓库、GUI仓库、公共依赖common仓库
  • 在后端和GUI仓库中,通过Git子模块引入common仓库:
    git submodule add <common仓库地址> common
    
  • 公共文件同步操作:
    • 拉取代码时需要同步子模块:git submodule update --init --recursive
    • 修改公共代码后,需要先提交common仓库的更新,再分别在后端、GUI仓库更新子模块的指向commit

二、CMake配置示例

common目录的CMakeLists.txt参考:

cmake_minimum_required(VERSION 3.16)
project(common)
# 如果是仅头文件的公共库用add_library(common INTERFACE)即可
add_library(common STATIC
        src/string_utils.cpp
        include/string_utils.h
        include/type_def.h
)
target_include_directories(common PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

后端/ GUI项目的CMakeLists.txt引入公共库的代码:

# 引入公共库
add_subdirectory(../common ${CMAKE_BINARY_DIR}/common_build)
# 关联到当前项目的目标
target_link_libraries(your_backend_target PRIVATE common)

三、参考开源项目案例

以下都是采用「核心逻辑后端 + 独立GUI + 公共依赖」拆分的CMake项目,可直接参考其目录和配置结构:

  • 多媒体处理工具类:开源视频剪辑工具OBS Studio的核心编码模块与GUI层拆分方案
  • 开发工具类:CMake自带的GUI模块cmake-gui与核心逻辑的拆分实现
  • 加密工具类:KeePassXC的密码存储核心逻辑与桌面GUI的拆分架构

内容的提问来源于stack exchange,提问作者zenno2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:06:03