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

使用CMake链接自研第一方C++游戏引擎到游戏项目的方案咨询

CMake 多项目依赖(引擎+游戏)最优配置方案

以下方案均完美适配Mac端CLion环境,按适配你需求的优先级从高到低排序:

1. 使用 FetchContent 模块(最适配独立Git仓库场景)

这是目前最符合你需求的方案,不需要固定本地目录结构,也不需要手动管理库文件,CMake会自动拉取指定版本的引擎代码和游戏一起编译:

  • 你只需要在TheGame/AnotherGame的根目录CMakeLists.txt中加入以下配置:
include(FetchContent)
# 声明引擎依赖的Git仓库信息
FetchContent_Declare(
  TheEngine
  GIT_REPOSITORY <你的TheEngine仓库Git地址>
  GIT_TAG <指定要使用的分支名、tag或者commit hash>
)
# 拉取并编译引擎
FetchContent_MakeAvailable(TheEngine)

# 你的游戏目标配置完成后,直接链接引擎即可
add_executable(TheGame src/main.cpp)
target_link_libraries(TheGame PRIVATE TheEngine)
  • 优势:
    • 自动处理引擎版本绑定,每个游戏可以独立选择使用的引擎版本,不会互相冲突
    • 不需要手动管理引擎二进制文件,编译游戏时会自动编译对应版本的引擎
    • CLion会自动索引引擎源码,支持直接在引擎代码里打断点、步进调试
    • 迁移项目到其他设备时不需要额外调整路径,只要能拉取Git仓库就能正常编译

2. Git子模块 + add_subdirectory(适合需要频繁修改引擎的场景)

如果你日常开发时会同时调整引擎代码和游戏逻辑,不想每次改引擎都提交Git再拉取,可以用这个方案:

  • 在每个游戏项目中把TheEngine添加为Git子模块,存放到项目的extern目录下
  • 在游戏的CMakeLists.txt中添加:
# 相对路径指向子模块中的引擎根目录
add_subdirectory(extern/TheEngine)
target_link_libraries(TheGame PRIVATE TheEngine)
  • 优势:引擎和游戏的代码修改可以实时生效,不需要额外的发布流程,两个仓库的提交完全独立,符合你独立管理Git仓库的需求。

3. 预编译安装(适合引擎很少改动的场景)

如果你的引擎已经进入稳定阶段,很少需要修改,可以把引擎预编译后安装到本地公共目录,避免每次编译游戏都重复编译引擎:

  • 在TheEngine的CMakeLists.txt中配置好安装规则,将编译产物(.a静态库)、头文件、CMake配置文件统一安装到本地公共目录,比如~/MyPersonalProjects/built_libs/TheEngine
  • 在游戏的CMakeLists.txt中直接查找已经安装的引擎:
set(TheEngine_DIR "~/MyPersonalProjects/built_libs/TheEngine/lib/cmake/TheEngine")
find_package(TheEngine REQUIRED)
target_link_libraries(TheGame PRIVATE TheEngine)

不推荐的做法

  • 手动复制.a文件到每个游戏项目:维护成本极高,每次引擎更新都要手动替换所有游戏的库文件,很容易出现版本不匹配问题,也无法调试引擎源码
  • 硬编码绝对路径引用引擎:项目迁移到其他设备或者调整目录结构后直接编译失败,完全不具备可移植性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:03