CMake-简略教程
简介
CMake是一个管理源代码构建的工具。
- 最初,CMake被设计为各种Makefile的生成器。
- 而今,CMake可以生成现代构建系统。
CMake广泛用于C和C++,也可以用于构建其他语言的源代码。
CMake的下载与安装
CMake官网:https://cmake.org/
CMake下载:https://cmake.org/download/
MinGW官网:https://www.mingw-w64.org/
MinGW下载:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/
根据系统架构和安装方式自行下载,下载完毕后进行安装和解压。
配置环境变量,使得CMake和GCC随处可用。如:
1 | C:\PC-APPS\CMake\bin |
打开cmd,输入cmake
和gcc -v
测试安装情况。
使用CMake构建C++项目
(1). 创建C++项目
创建一个项目CMakeDemo
,其结构如下:
1 | └─CMakeDemo |
main.cpp
1 |
|
CMakeLists.txt
1 | cmake_minimum_required(VERSION 3.30) |
注意点:
- 参数使用空格或分号隔开;如:
add_executable(Tutorial main.cpp)
或者add_executable(Tutorial;main.cpp)
- 使用
${VAR}
引用变量;
(2). 构建C++项目
CMake的命令是不区分大小写的,但是参数和变量区分大小写。
*
在bulid
目录下打开cmd
,执行cmake ..\src
命令:
此处没有指定生成器,若系统中还包含其他生成器,需要手动指定。输入
cmake --help
查看缺少的选项,需要添加-G <generator-name>
选项。
此处我们使用的是MinGW,因此得到的完整命令为cmake -G "MinGW Makefiles" ..\src
。
1 | C:\Users\Smith\Desktop\WorkSpace\CPP\CMakeDemo\build>cmake -G "MinGW Makefiles" ..\src |
在当前目录下构建项目,输入cmake --build .
:
1 | C:\Users\Smith\Desktop\WorkSpace\CPP\CMakeDemo\build>cmake --build . |
此时,在build目录下生成以下文件:
- 目标文件(target):可执行文件(add_executable)和库文件(add_library);
1
2
3
4
5
6
7
8
9
10
11└─CMakeDemo
├─build
│ ├─CMakeFiles
| ├─cmake_install.cmake
| ├─CMakeCache.txt
| ├─Makefile
| └─Tutorial.exe
└─src
├─CMakeLists.txt
└─main.cpp
(3). 运行可执行程序
在cmd中运行Tutorial.exe
即可执行。
1 | C:\Users\Smith\Desktop\WorkSpace\CPP\CMakeDemo\build>Tutorial.exe |
CMake命令
对象脚本命令(Scripting Commands)
cmake_minimum_required
格式:
1 | cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR]) |
作用:
- 指定构建项目所需的最低和最高CMake版本,并更新策略设置。若运行的CMake版本低于指定的最低版本,将会停止处理项目并报错。
- cmake版本号的形式都为
major.minor[.patch[.tweak]]
,如3.22.0,3.13.5。 - 该命令将变量
CMAKE_MINIMUM_REQUIRED_VERSION
设置为<min>
。 - 该命令隐式调用了
cmake_policy(VERSION <min>[...<max>])
命令。
参数 | 选项 | 作用 | |
---|---|---|---|
<min> |
必选 | 指定最低的CMake版本号 | |
[...<policy_max>] |
可选(v3.12新增) | 指定最高的CMake版本号(防止项目在引入不兼容的新版本时出现意外问题,确保代码的稳定性和可靠性) | |
[FATAL_ERROR] |
可选 | 若不满足最低版本要求,报错并终止处理项目 |
示例:
1 | cmake_minimum_required(VERSION 3.1.3) |
注意:
- 该命令通常放在 CMakeLists.txt 文件的第一行,即在 project 命令之前。这是为了确保所有后续命令都遵循指定的CMake版本要求。
- 该命令也可以在函数内调用,此时它仅在函数内部生效。然而,不建议这样做,因为这可能会导致版本管理的混乱和潜在的兼容性问题。
工程命令(Project Commands)
project
格式:
1 | project(<PROJECT-NAME> [<language-name>...]) |
作用:
- 设置项目名称,并将其存储在变量
PROJECT_NAME
中,当从顶层调用CMakeLists.txt时,还将项目名称存储在变量CMAKE_PROJECT_NAME
中。 - 设置项目源目录的绝对路径,将其存储在变量
PROJECT_SOURCE_DIR
和<PROJECT-NAME>_SOURCE_DIR
中。 - 设置项目二进制目录的绝对路径,将其存储在变量
PROJECT_BINARY_DIR
和<PROJECT-NAME>_BINARY_DIR
中。 - (v3.21新增)指定项目是否为顶级项目,将其存储在
PROJECT_IS_TOP_LEVEL
和<PROJECT-NAME>_IS_TOP_LEVEL
中。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kure's Blog!