【发布时间】:2021-01-03 01:49:54
【问题描述】:
我有一个关于如何构建 c++ 项目并使用 CMake(在 CLion 内部)构建它的问题。我对 c++(我两周前才开始学习该语言)和 CMake(我从未配置过 CMake 文件)非常陌生。不过,我确实对其他编程语言及其生态系统(如 Java、JavaScript、Php 和 .NET)有大量经验——也许与这些生态系统进行类比会有所帮助?
我们正在为一个学校项目构建自己的(小型 2d)游戏和游戏引擎。游戏引擎应该可以自己交付,游戏应该建立在我们自己的引擎上。引擎将有自己的依赖项(使用 SDL2 构建,这是一个要求)。
我想引擎将成为一个(静态)库,而实际游戏将编译为依赖于引擎库的可执行文件。
为了简化项目管理,我们希望将引擎和游戏代码托管在同一个 git 存储库中。
鉴于我们可能希望将math 模块放入我们的引擎中(可能不是这种情况,但出于这个问题的目的)我想像下面这样的文件夹结构:
our-project/
├── README.md
├── engine
│ ├── src
│ │ ├── math.cpp
│ │ └── math.h
│ └── test
│ └── ...
└── game
├── src
│ └── main.cpp
└── test
└── ...
然后引擎将包含以下代码:
// in math.h
namespace engine::math {
int add(int a, int b);
}
// in math.cpp
#include "math.h"
namespace engine::math {
int add(int a, int b) {
return a + b;
}
}
假设我们想利用游戏中的这个引擎代码,我想象以下代码:
// in game/main.cpp
#include <iostream>
#include "engine/math.h"
using namespace engine;
int main() {
std::cout << math::add(10, 1) << std::endl;
}
问题
- 如何设置 CMake,以便我既可以单独构建引擎(静态库),又可以构建依赖同一引擎的游戏(可执行文件)?
- 我应该如何管理引擎头文件?如何使它们可以访问游戏代码?我应该为头文件使用不同的结构吗?
- 此文件夹结构是否易于管理?我应该考虑不同的方法吗?
【问题讨论】:
标签: c++ cmake build clion directory-structure