cmake-配置与基础
星之旷野,美梦犹存
Cmake
CMAKE 是一个开源的、跨平台的自动化构建系统。它的主要功能是帮助开发者管理软件项目的构建过程,无论项目在哪种操作系统上、使用哪种编译器。
Cmake并不直接生成编译代码,而是一个“项目配置生成器”。
安装CMAKE
首先我们在Cmake官网下载CMAKE构建工具:Download CMake
选择Windows x64 Installer 下载即可,下载完成后我们启动程序安装CMAKE。
安装完成后,在终端中输入:cmake --version
显示图中信息即为成功。
Ninja
Ninja 是一个小而快的构建系统,用于实际的构建项目,作用类似于链接器,但是ninja并不负责编译文件,实际负责编译的还是编译器gcc等。
安装Ninja
在github库的release中下载最新的对应版本的zip文件:Ninga
- 创建目录: 在你电脑上选择一个合适的位置来存放 Ninja 可执行文件。建议选择一个简短、没有空格的路径,例如:
C:\tools\ninja
- 解压文件: 将下载的
ninja-win.zip
文件解压到你刚刚创建的目录中。解压后,你应该会在该目录下看到一个名为ninja.exe
的文件。 - 将 Ninja 添加到系统 PATH 环境变量
安装完成后在终端中输入 ninja --version
输出版本号即为安装成功。
使用Cmake和Ninja的构建流程
Cmake
- CMake (设计师/项目经理): 你告诉设计师你需要一栋什么样的房子(你的项目),有多少房间(源文件),需要什么电器(外部库)。设计师(CMake)会根据这些需求,绘制出详细的 施工图纸 (生成
.ninja
文件)。这些图纸是针对特定施工队伍(比如使用 Ninja 的施工队)的。
Ninja
- Ninja (施工队长/执行者): 施工队长(Ninja)拿到设计师的施工图纸后,不会自己去盖房子,而是会根据图纸, 高效地组织和指挥工人 。它会找出哪些工作可以同时进行(并行编译),哪些地方需要重新返工(增量构建),确保所有步骤都按图纸执行,并且速度最快。
GCC
- GCC (工人/建造师): 工人(GCC)是实际动手盖房子的人。他们根据施工队长(Ninja)的指令,一块砖一块砖地砌墙,把水泥和钢筋变成结构(把源代码编译成机器码)。
在VScode中的实操
针对一个由C/C++语言完成的,由多个文件共同构成的,引入多个外部库的C项目来说,我们首先需要确保VScode中安装以下插件:
- C语言扩展包,一共包含三个扩展
- CMAKE语法支持
确保我们的系统环境中有:
- CMAKE
- Ninja
- GCC等c语言编译工具
接下来我们打开一个带有CMakeLists.txt 文件的C项目。
同时侧边工具栏会有出现一个CMAKE扩展的独有标志,低部会有通过cmake 快速构建,调试,启动项目的三个按钮。
通过vsc自动调用cmake构建的项目会在当前项目目录下创建一个build目录,并自动使用Ninja或make等工具,直接生成二进制可执行文件。
CMake 构建实例
项目结构
1 |
|
main.cpp
:主程序入口文件。math/
:数学计算相关模块calculator.cpp/h
:计算器功能实现。geometry.cpp/h
:几何计算功能。
utils/
:工具类模块logger.cpp/h
:日志记录功能。file_helper.cpp/h
:文件操作辅助功能。
core/
:核心功能模块engine.cpp/h
:核心引擎实现。config.cpp/h
:配置管理功能。
CMakeLists.txt
:CMake 配置文件。
编写CMakeLists.txt文件
CMakeLists.txt文件用于配置CMake项目:
1 |
|
构建项目
为了保持源代码整洁,我们进入build目录进行构建。
1 |
|
编译项目
使用编译工具完成编译:
1 |
|
清理项目
1 |
|
cmake命令与build命令
这时我们需要思考一个关键的问题:什么时候需要执行一次 cmake
命令,什么时候需要执行一次 cmake --build
命令
cmake命令:
- 首次构建项目时
- 修改了CMakeLists.txt 文件时
- 添加/删除源文件
- 修改编译选项
- 添加/删除依赖库
- 修改项目配置
- 删除build目录后创建
cmake –build:
- 修改源代码文件内容时
- CMake配置已经完成,只需要编译时
总结:在我们创建了新的
.c
文件时,或者我们修改了Cmake配置时,我们需要执行一次cmake
,其他时候只需要执行cmake --build
即可。在实际使用时,一般先执行
cmake --build
如果报错可以尝试执行一次cmake
指令