游戏引擎前置知识01-cmake构建工具入门

0. 前言

23年毕业,至今在公司已经工作了将近一年时间,想着手计划学习计算机图形学相关技术,于是计划从做出一个工程开始动手,先有一个简单的demo小引擎出来,有一些成就感激励自己前行,同时整体了解一下游戏引擎所设计的知识面,再沿途进行知识的横向扩展,逐步深入。

在此之前可以建议大家听一听games104的相关系列课程,是计算机图形学入门比较好的一个课程。

首先会有简单的几篇文章记录开始做引擎前遇到的一些问题,也是做引擎必要的一些前置技术积累。

本篇是关于CMake构建工具的讲解

1. Cmkae构建工具的作用

用我自己的话来将,cmake的就是好比与一个厨师,将很多生菜、佐料加工成一盘美味可口的熟菜。类比到代码里面就是将各个cpp和头文件放在一起编译出一个可用的软件。

cmake 主要做的事情是:编译和链接,编译是将人能识别的代码转化成机器能识别的代码,链接是将一个或多个目标文件与所需的库文件结合,最后将生成可直接执行的文件,例如main.exe。

当然深入理解会发现没有这么简单,cmake在构建前会先生成一系列构建系统文件,并且在编译过程中会做预处理语法分析,抽象语法树解析...

2. Cmake的安装

windows环境可以参考如下的安装教程: csdn安装教程

比较重要的是,由于要在window下直接输入make,就可以识别makefile并且自动编译,需要将MinGW安装路径bin文件下的mingw32-make.exe复制一份并重命名为make.exe。这样会方便后续的构建

3. Cmake的使用demo、与学习

我使用的是clion + cmake 来开发demo项目,cmake是按照上面的教程安装的,大家先安装好环境之后再跟着下面的demo来进一步了解cmake

首先这是我的项目目录结构,用来实现一个hello world!的打印功能。

其cmake编译的关系图如下所示,最外层的cmakelists文件指定了需要构建的子目录,子目录包含真正的需要构建的项目

cmake_demo\CMakeLists.txt 文件:指定了cmake版本,工程名称,以及需要包含构建的子目录

scss 复制代码
cmake_minimum_required(VERSION 3.15)
project(cmake_demo_study)
add_subdirectory(sub_demo)

cmake_demo\sub_demo\CMakeLists.txt 文件:指定构建的应用名称,以及构建所需要的源文件列表

scss 复制代码
add_executable(hello_cmake hello.cpp hello.h main.cpp)

cmake_demo\sub_demo\main.cpp 文件:入口函数,主文件

arduino 复制代码
//
// Created by (cie_tea)15694 on 2024/2/27.
//

// main.cpp
#include "hello.h"

int main() {
    hello("World");
    return 0;
}

cmake_demo\sub_demo\hello.h 功能函数,头文件

arduino 复制代码
//
// Created by (cie_tea)15694 on 2024/2/27.
//

// main.cpp
#include "hello.h"

int main() {
    hello("World");
    return 0;
}

cmake_demo\sub_demo\hello.cpp hello world函数实现

c 复制代码
//
// Created by (cie_tea)15694 on 2024/2/27.
//

// hello.cpp
#include "hello.h"
#include <iostream>

// 函数定义
void hello(const std::string& name) {
    std::cout << "Hello, " << name << "!" << std::endl;
}

执行如下命令即可构建成功,构建成功后执行exe文件即可打印出hello world

bash 复制代码
mkdir build
cd build
cmake -G "MinGW Makefiles" ..
make

4.最后

  • 需要值得注意的是按照教程cmake安装完成后,用cmd命令自行检查,确定cmake和make命令都正常之后再搭建工程
  • 其次在理解cmake的作用,是编译和链接,并且在编译和链接前会先生成前置文件(这里可以理解为厨师做菜的菜谱)
  • 结合demo工程中的两个cmakelists文件之间的关系,以及代码内容,初步理解cmakelists工作原理和基础命令。看完文章之后还需要进一步了解详细配置命令来巩固知识。
相关推荐
周之鸥6 天前
Qt 项目国际化从零到一:用 Qt Linguist 实现多语言动态切换(含源码与踩坑指南)
qt·i18n·cmake·qmake·linguist·lupdate·lrelease
老黄编程9 天前
ros2 中 CMakeLists.txt 的 ament_package 有什么用?有什么使用约束?必须放置尾部吗?
ros·cmake
澄澈i9 天前
CMake学习篇[3]---CMake进阶+嵌套CMakeLists+多层级关系
c++·学习·cmake
一只小bit15 天前
CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程
c语言·开发语言·c++·cmake
研來如此20 天前
Visual Studio 2022
cmake·visual studio
澄澈i25 天前
CMake学习篇[2]---CMake进阶+非同级目录构建+静态库/动态库链接
c++·学习·cmake
usabcd225 天前
如何重新编译HyperLPR原生库以消除16k对齐警告
android·c++·cmake·ndk·mnn·16k对齐·hyperlpr
慧都小项1 个月前
Parasoft C/C++test 针对 CMake 项目的自动化测试配置
自动化测试·cmake·parasoft
羑悻的小杀马特1 个月前
CMake 全流程开发实战:从零开始掌握C++项目构建、测试到一键分发的完整解决方案
c++·cmake
UnnamedOrange1 个月前
ROS1 配置代码覆盖率
c++·cmake