Link CMake 的第一方库

Link 1st-party library with CMake

我想用 C++ 制作游戏,我的目标是将游戏引擎代码与游戏逻辑代码隔离开来,这样我就可以重用一些逻辑并拥有单独的 git 存储库:

+-- MyPersonalProjects
|  +-- TheEngine (library)
|  |  +-- src...
|  +-- TheGame (depends on TheEngine)
|  |  +-- src...
|  +-- AnotherGame (depends on TheEngine)
|  |  +-- src...

我是 C++ 的新手(来自 Unity C#),所以构建系统仍然是我想要弄清楚的东西。

使用 CMake,我将如何将引擎链接到游戏?使用相对路径?将 .a 文件复制到每个引擎?或者有更好的方法来解决这个问题吗?


IDE: CLion for Mac

如果您只有一个引擎和一堆游戏,那么将引擎作为 git 子模块 添加到每个游戏就足够了,然后调用 add_subdirectory 从每个内部的引擎上。素描:

cmake_minimum_required(VERSION 3.21)
project(Game)

add_subdirectory(Engine)

# ...

target_link_libraries(Game PRIVATE Engine::Engine)

此方法的主要优点是易于使用和维护。无需编写安装规则或学习包管理器。主要缺点是您必须等待整个引擎为每个游戏构建。 CCache 是一种部分缓解措施(不适用于 Windows,可能会因愚蠢的原因而失败)。

另一个缺点是它不能扩展。 1 对 N 依赖图很容易跟踪。任意依赖 DAG 不是。随着规模的扩大和构建时间的增加,与 vcpkg(或 Conan)等包管理器集成的价值支柱会显着增加 .