简介

本文主要内容:
1.介绍CMake的概念
2.演示如何使用CMake,如何在VSCode中配置CMake环境
3.介绍CMake的一些语法
4.关于如何使用VSCode,配置C/C++环境,请看另一篇文章VS Code使用教程
5.如果不打算用VSCode,请跳过四,在五中有如何在命令行编译一个项目的演示
6.在VSCode的终端中进行的命令,与在命令行窗口进行是一样的
CMake官网: https://cmake.org


一.CMake概述


1.什么是 CMake?

CMake 是一个跨平台的自动化构建工具,广泛用于 C/C++ 项目的构建管理。它生成平台特定的构建文件(例如 Makefile、Visual Studio 工程文件等),使得开发人员能够在不同的操作系统和编译器上构建项目。CMake 本身不是编译工具,而是一个生成工具,它根据你的项目配置生成编译系统需要的文件。

2.CMake 的作用

CMake 的主要作用是帮助开发者管理和简化项目的构建过程。它允许开发者在不同的平台上使用统一的配置文件来构建项目,而不必为每个平台编写特定的构建脚本。例如,在 Linux 上可能使用 Makefile 构建,而在 Windows 上则使用 Visual Studio 项目文件,CMake 会根据不同的平台自动选择合适的构建方式。

3.CMake 的主要特点

  1. 跨平台支持:CMake 支持多种平台,包括 Windows、Linux、macOS 等。它能够生成适应不同平台的构建文件,例如:

    • Unix/Linux:Makefile
    • Windows:Visual Studio、MinGW、Ninja
    • macOS:Xcode、Makefile
  2. 可扩展性:CMake 允许用户通过添加模块、脚本等进行扩展,支持包括第三方库的自动发现和配置。

  3. 支持外部项目:CMake 支持将外部项目和依赖集成到构建过程中,可以通过 ExternalProject 来下载并构建第三方依赖。

  4. 项目配置管理:CMake 使用 CMakeLists.txt 文件来描述项目的构建过程。这个文件包含了有关源文件、编译选项、目标设置、依赖库等的信息。

  5. 构建类型支持:CMake 可以生成多种类型的构建文件,支持不同的构建选项,如调试版本、发布版本等。

  6. 支持多种构建系统:CMake 生成的文件可以用于多种构建系统,如 Make、Ninja、Xcode 等。

4.CMake 基本工作流程

  1. 创建 CMakeLists.txt 文件:这是 CMake 项目的核心文件,描述了构建过程和项目配置。
  2. 运行 CMake:CMake 使用 CMakeLists.txt 来生成适用于目标平台的构建文件。例如,它可以生成 Makefile 或 Visual Studio 项目文件。
  3. 构建项目:根据生成的构建文件,使用相应的构建工具(如 makemsbuild)来编译代码。

5.例子:CMakeLists.txt 文件

一个简单的 CMakeLists.txt 文件示例:

# 设置最低版本要求
cmake_minimum_required(VERSION 3.10)

# 项目名称
project(MyProject)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

# 查找源文件
set(SOURCES
    main.cpp
    MyClass.cpp
)

# 定义可执行文件
add_executable(MyProject ${SOURCES})

# 如果有依赖库,可以链接
# target_link_libraries(MyProject SomeLibrary)

6.CMake 常见指令

7.CMake 生成的构建文件

CMake 会根据你指定的构建工具生成对应的构建文件。比如:

这些构建文件是由 CMake 根据 CMakeLists.txt 配置自动生成的,你只需要运行 CMake 工具即可。

8.使用 CMake 构建项目

假设你有一个 CMakeLists.txt 文件,你可以按照以下步骤使用 CMake 构建项目:

  1. 创建构建目录:通常建议在项目外部创建一个单独的构建目录,这样可以保持源代码目录的干净。例如:
mkdir build
cd build
  1. 运行 CMake:在构建目录中运行 CMake 来生成构建文件。
cmake ..
  1. 构建项目:根据你使用的构建系统运行构建命令:

    • 对于 Makefile:
make
- 对于 Visual Studio: 打开生成的 `.sln` 文件,使用 Visual Studio 进行构建。

9.高级功能

find_package(OpenGL REQUIRED)
target_link_libraries(MyProject OpenGL::GL)
if(WIN32)
    message("This is Windows")
else()
    message("This is not Windows")
endif()
install(TARGETS MyProject DESTINATION /usr/local/bin)

10.总结

CMake 是一个强大的工具,简化了跨平台构建过程,支持自动生成多种构建系统的文件,方便开发人员管理和构建复杂的项目。通过使用 CMakeLists.txt 文件,CMake 可以自动处理项目的源文件、库依赖和构建过程,使得开发者可以集中精力编写代码,而不需要手动配置各个平台的构建系统。


二.安装MinGW-w64工具链


CMake还需要一个编译器才能使用,如果你已经安装过编译器,请跳过

注意:传统的MinGW自带一个运行时库,UCRT是新为C和C++设计的标准运行时库,MinGW-w64是一个MinGW的改进版,在这里我们通过MSYS2(一个用于Window平台的开发工具环境)安装一个基于UCRT的MinGW-w64工具链

1.下载MSYS2

网址:https://code.visualstudio.com/docs/cpp/config-mingw
注:该网站是英文的,可以使用浏览器自带翻译,翻译成中文,后续配置内容在网站下也有讲解

2.安装后打开并复制网站中的命令输入

pacman -S –needed base-devel mingw-w64-ucrt-x86_64-toolchain
注意:安装时碰到Enter a selection (default=all):,回车就行,网站上说的也有

3.复制ucrt64文件中的bin文件地址

刚才我们用命令安装的文件都保存到了ucrt64这个文件夹下,在电脑文件中找到ucrt64文件下的bin文件(就在安装MSYS2的文件中),并复制bin文件的文件地址

4.添加到Windows环境变量的Path路径中

.将ucrt64的bin文件地址到 Windows环境变量的Path路径中

4.1.打开系统环境变量界面

在搜索栏中搜索系统环境变量并打开

4.2. 进入Path变量编辑界面

点击环境变量,在用户/系统变量中,选择Path变量,然后选择编辑

4.3. 新建并放入复制的地址

点击新建,将复制的文件地址复制进去,最后点击确定退出

4.4.图片演示


三.安装CMake


官网: https://cmake.org/download/

可以在终端使用cmake –version检验cmake是否配置成功


四.在VSCode中使用CMake


1.安装插件

1.CMake Tools 插件

主要功能

  1. 自动发现 CMake 项目: 插件会自动检测 CMakeLists.txt 文件,并将项目与 CMake 工具链配置相关联。

  2. 配置和生成构建系统: 插件提供了一个界面来设置构建类型(如 Debug 或 Release)以及选择不同的 CMake 工具链文件。通过点击按钮或使用命令面板,你可以轻松配置并生成构建文件。

  3. 集成 CMake 构建系统: 通过 CMake Tools,你可以直接在 VS Code 中运行 CMake 构建命令(如 cmake --build)。插件集成了 CMake 的构建过程,使得你不需要跳出 VS Code 就能进行编译和构建。

  4. 调试支持: 插件允许你在 VS Code 内部配置和启动调试会话。你可以设置断点并调试 CMake 项目中的 C++ 代码,集成了调试器(如 GDB 或 LLDB)来帮助你调试程序。

  5. 显示 CMake 输出和日志: 插件提供了 CMake 的构建输出、配置和诊断日志的可视化界面,使你可以查看详细的错误信息和构建过程。

  6. 多平台支持CMake Tools 支持 Linux、macOS 和 Windows 平台,能够帮助开发者在多平台上使用相同的配置进行构建。

  7. 支持 CMake Presets: 插件支持 CMake 预设(Presets)功能,可以轻松切换不同的构建配置,而无需手动编辑 CMake 文件。

  8. 集成测试和清理工具: 插件支持 CMake 的测试框架,可以直接在 VS Code 中运行测试,并查看结果。同时,你还可以轻松清理构建文件(cmake --clean)。

常用功能和快捷方式


2.卸载捆绑CMake Tools插件的CMake插件

这个插件上次更新都是2017年了,长时间没有维护,推荐卸载后替换成


3.CMake Language Support 插件

这个插件安装后,直接在 VS Code 中打开 CMakeLists.txt 或其他 CMake 脚本文件时,即可自动启用语法高亮和代码补全功能。

主要功能:

  1. 语法高亮: 插件为 CMake 脚本提供了语法高亮显示,使得关键字、变量和函数更加突出,提高代码可读性。

  2. 代码补全: 提供 CMake 关键字、命令、函数和变量的自动补全,减少了输入错误并加速了编辑过程。

  3. 代码片段: 插件内置了一些常用的 CMake 代码片段(如 project(), add_executable() 等),使得开发者可以快速插入常用命令。

  4. 命令提示: 当输入 CMake 命令时,插件会提供相应的命令提示和参数建议,帮助开发者理解每个命令的用法。

  5. 错误检测: 提供对 CMake 脚本的基本错误检查,能帮助开发者在编辑时发现潜在的语法错误。

  6. 集成 VS Code 调试工具: 虽然插件本身不提供直接的 CMake 构建和调试功能,但它与 CMake Tools 插件可以配合使用,提供一个完整的 CMake 开发环境。


2.安装生成器Ninja

Ninja开源仓库: https://github.com/ninja-build/ninja/releases/tag/v1.12.1
下载对应压缩包,解压保存到某个目录
注释:在 CMake 中,生成器(Generator) 是一种用于指定如何生成目标构建文件(例如 Makefile、Visual Studio 工程文件、Xcode 项目等)的机制。
使用什么生成器,就生成对应的构建文件,例如:使用Visual Studio生成器就生成Visual Studio构建文件
Ninja 生成器 会生成适用于 Ninja 构建系统 的构建文件。具体来说,CMake 使用 Ninja 生成器时,会生成一个 build.ninja 文件。


3.将生成器ninja所在目录添加到PATH

复制这个可执行文件所在的目录的路径 可以在终端使用ninja –version看看是否配置成功


4.检验是否配置成功

创建一个文件夹,用VS Code打开,然后添加一个c++源文件,随便写点代码,再添加一个文件,名称一定要为CMakeLists.txt,一个字母都不能错,包括大小写,错了就识别不出来 最简单的CMakeList.txt要包含以下三行代码

cmake_minimum_required(VERSION 3.31.1)//指定 CMake 的最低版本
project(test)//项目名称
add_executable(test main.cpp)//可执行文件的名称以及要用到的源文件

这三行 CMake 代码的功能分别是:

  1. cmake_minimum_required(VERSION 3.31.1):指定 CMake 的最低版本要求。
  2. project(test):定义项目名称为 test
  3. add_executable(test main.cpp):指定生成名为 test 的可执行文件,使用 main.cpp 作为源文件。

1. cmake_minimum_required(VERSION 3.31.1)

这行代码指定了 CMake 的最低版本要求。它告诉 CMake 构建系统使用的最低版本是 3.31.1,也就是说,只有版本等于或高于此版本的 CMake 才能正确处理项目的构建。

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.31.1 or higher is required. You are running version 3.20.0

2. project(test)

这行代码定义了 项目的名称project 命令通常会在 CMake 项目的 CMakeLists.txt 文件中使用,它指定了项目的名称、支持的语言等。


3. add_executable(test main.cpp)

这行代码定义了 生成可执行文件add_executable() 命令用于指定生成的可执行文件的名称及其源代码文件。

这行命令在构建过程中会被转换成类似以下命令的操作:

g++ main.cpp -o test

其中,g++ 是编译器,main.cpp 是源代码文件,-o test 指定输出文件名为 test


如果你之前编写了CMakeList.txt这个文件,打开VSCode时就会自动生成一个build文件
构建文件,这些文件是 CMake 配置和构建过程中自动生成的 右键点击CMakeList.txt这个文件,点击生成所有项目 然后当前目录下就会生成build文件,并在其中生成可执行文件 在文件中打开,可以正常运行


五.CMake语法


官方文档: https://cmake.org/cmake/help/latest/guide/tutorial/index.html
如果看英文废力,可以用浏览器自带的翻译,翻译成中文

1.构建并运行一个项目

这里在VSCode的终端中演示,实际和VSCode毫无关系,在命令符窗口也是一样的
下图是翻译成中文的官方文档

1.1.编辑CMakeLists.txt文件

必须要有下列三行代码,具体参数自行设置,这里沿用上文的内容

cmake_minimum_required(VERSION 3.31.1)//指定 CMake 的最低版本
project(test)//项目名称
add_executable(test main.cpp)//可执行文件的名称以及要用到的源文件

1.2.创建一个文件夹

这个文件夹用来存储构建过程中生成的文件,在终端导航到该文件夹目录下

1.3.选择生成器

使用cmake –version命令,在列出的信息中有可用的生成器的列表 我们这里演示使用的是Ninja,把它的名字记住

1.4.生成构建系统的文件并编译

1.使用下面的命令,引号内是要使用的生成器,后面是源代码所在的目录
../是返回上级目录,我这里的源代码就在build的上级目录
这行代码会在当前目录下生成一个构建系统

cmake -G "Ninja" ../

2.使用下面的命令,这里的 “.” 就是指在当前目录下通过构建系统的文件编译一个可执行程序

cmake --build .

3.可以直接使用.+程序名运行

2.CMakeLists.txt中的语法