简介
本文主要内容:
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 的主要特点
-
跨平台支持:CMake 支持多种平台,包括 Windows、Linux、macOS 等。它能够生成适应不同平台的构建文件,例如:
- Unix/Linux:Makefile
- Windows:Visual Studio、MinGW、Ninja
- macOS:Xcode、Makefile
-
可扩展性:CMake 允许用户通过添加模块、脚本等进行扩展,支持包括第三方库的自动发现和配置。
-
支持外部项目:CMake 支持将外部项目和依赖集成到构建过程中,可以通过
ExternalProject
来下载并构建第三方依赖。 -
项目配置管理:CMake 使用
CMakeLists.txt
文件来描述项目的构建过程。这个文件包含了有关源文件、编译选项、目标设置、依赖库等的信息。 -
构建类型支持:CMake 可以生成多种类型的构建文件,支持不同的构建选项,如调试版本、发布版本等。
-
支持多种构建系统:CMake 生成的文件可以用于多种构建系统,如 Make、Ninja、Xcode 等。
4.CMake 基本工作流程
- 创建 CMakeLists.txt 文件:这是 CMake 项目的核心文件,描述了构建过程和项目配置。
- 运行 CMake:CMake 使用
CMakeLists.txt
来生成适用于目标平台的构建文件。例如,它可以生成Makefile
或 Visual Studio 项目文件。 - 构建项目:根据生成的构建文件,使用相应的构建工具(如
make
或msbuild
)来编译代码。
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 常见指令
- cmake_minimum_required(VERSION): 设置 CMake 的最低版本要求。
- project(ProjectName): 定义项目的名称。
- set(variable value): 设置一个 CMake 变量。
- add_executable(name source_files): 创建一个可执行文件。
- add_library(name source_files): 创建一个库文件。
- target_link_libraries(target library): 将库文件链接到目标(可执行文件或库)。
7.CMake 生成的构建文件
CMake 会根据你指定的构建工具生成对应的构建文件。比如:
- Makefile:用于 GNU Make 构建系统。
- Visual Studio 工程文件:用于 Windows 下的 Visual Studio。
- Xcode 工程文件:用于 macOS 上的 Xcode。
这些构建文件是由 CMake 根据 CMakeLists.txt
配置自动生成的,你只需要运行 CMake 工具即可。
8.使用 CMake 构建项目
假设你有一个 CMakeLists.txt
文件,你可以按照以下步骤使用 CMake 构建项目:
- 创建构建目录:通常建议在项目外部创建一个单独的构建目录,这样可以保持源代码目录的干净。例如:
mkdir build
cd build
- 运行 CMake:在构建目录中运行 CMake 来生成构建文件。
cmake ..
-
构建项目:根据你使用的构建系统运行构建命令:
- 对于 Makefile:
make
- 对于 Visual Studio: 打开生成的 `.sln` 文件,使用 Visual Studio 进行构建。
9.高级功能
- 查找库和包:CMake 支持通过
find_package()
来查找外部库和工具包。比如:
find_package(OpenGL REQUIRED)
target_link_libraries(MyProject OpenGL::GL)
- 条件编译:可以根据平台或其他条件指定不同的编译选项:
if(WIN32)
message("This is Windows")
else()
message("This is not Windows")
endif()
- 创建安装包:CMake 可以生成安装包,例如
.deb
或.rpm
文件。
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 插件
主要功能
-
自动发现 CMake 项目: 插件会自动检测 CMakeLists.txt 文件,并将项目与 CMake 工具链配置相关联。
-
配置和生成构建系统: 插件提供了一个界面来设置构建类型(如 Debug 或 Release)以及选择不同的 CMake 工具链文件。通过点击按钮或使用命令面板,你可以轻松配置并生成构建文件。
-
集成 CMake 构建系统: 通过
CMake Tools
,你可以直接在 VS Code 中运行 CMake 构建命令(如cmake --build
)。插件集成了 CMake 的构建过程,使得你不需要跳出 VS Code 就能进行编译和构建。 -
调试支持: 插件允许你在 VS Code 内部配置和启动调试会话。你可以设置断点并调试 CMake 项目中的 C++ 代码,集成了调试器(如 GDB 或 LLDB)来帮助你调试程序。
-
显示 CMake 输出和日志: 插件提供了 CMake 的构建输出、配置和诊断日志的可视化界面,使你可以查看详细的错误信息和构建过程。
-
多平台支持:
CMake Tools
支持 Linux、macOS 和 Windows 平台,能够帮助开发者在多平台上使用相同的配置进行构建。 -
支持 CMake Presets: 插件支持 CMake 预设(Presets)功能,可以轻松切换不同的构建配置,而无需手动编辑 CMake 文件。
-
集成测试和清理工具: 插件支持 CMake 的测试框架,可以直接在 VS Code 中运行测试,并查看结果。同时,你还可以轻松清理构建文件(
cmake --clean
)。
常用功能和快捷方式
- 配置 CMake 项目:点击底部状态栏中的 CMake 配置按钮,或者使用命令面板运行
CMake: Configure
。 - 构建项目:在命令面板中选择
CMake: Build
,或者点击状态栏的构建按钮。 - 切换构建目标和配置:可以从状态栏快速选择不同的构建目标(例如 Debug 或 Release)。
- 调试程序:点击状态栏的调试按钮,或使用命令面板选择
CMake: Debug
。 - 查看构建日志:通过查看
CMake: View Log
,可以直接查看 CMake 输出的日志,帮助调试构建问题。
2.卸载捆绑CMake Tools插件的CMake插件
这个插件上次更新都是2017年了,长时间没有维护,推荐卸载后替换成
3.CMake Language Support 插件
这个插件安装后,直接在 VS Code 中打开 CMakeLists.txt
或其他 CMake 脚本文件时,即可自动启用语法高亮和代码补全功能。
主要功能:
-
语法高亮: 插件为 CMake 脚本提供了语法高亮显示,使得关键字、变量和函数更加突出,提高代码可读性。
-
代码补全: 提供 CMake 关键字、命令、函数和变量的自动补全,减少了输入错误并加速了编辑过程。
-
代码片段: 插件内置了一些常用的 CMake 代码片段(如
project()
,add_executable()
等),使得开发者可以快速插入常用命令。 -
命令提示: 当输入 CMake 命令时,插件会提供相应的命令提示和参数建议,帮助开发者理解每个命令的用法。
-
错误检测: 提供对 CMake 脚本的基本错误检查,能帮助开发者在编辑时发现潜在的语法错误。
-
集成 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 代码的功能分别是:
cmake_minimum_required(VERSION 3.31.1)
:指定 CMake 的最低版本要求。project(test)
:定义项目名称为test
。add_executable(test main.cpp)
:指定生成名为test
的可执行文件,使用main.cpp
作为源文件。
1. cmake_minimum_required(VERSION 3.31.1)
这行代码指定了 CMake 的最低版本要求。它告诉 CMake 构建系统使用的最低版本是 3.31.1
,也就是说,只有版本等于或高于此版本的 CMake 才能正确处理项目的构建。
-
作用:确保你的项目在使用 CMake 时,至少使用指定的版本(或者更高版本)。如果当前安装的 CMake 版本低于这个版本,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
- 一般来说,
cmake_minimum_required
语句位于CMakeLists.txt
的开头,它是用来控制构建工具版本兼容性的,避免在较旧版本的 CMake 上出现不可预知的错误。
2. project(test)
这行代码定义了 项目的名称。project
命令通常会在 CMake 项目的 CMakeLists.txt
文件中使用,它指定了项目的名称、支持的语言等。
-
作用:
test
是项目的名称,可以在构建过程中使用。例如,生成的输出目录可能会以这个名称命名,或者它会影响一些默认行为。 -
project()
命令还会自动设置一些与该项目相关的变量。例如:PROJECT_NAME
:项目名称(在这个例子中是test
)。PROJECT_SOURCE_DIR
:源代码根目录。PROJECT_BINARY_DIR
:构建输出根目录。
-
这个命令的可选参数还可以设置支持的编程语言,例如
C CXX
,表示该项目支持 C 和 C++ 语言(默认为 C 和 C++)。
3. add_executable(test main.cpp)
这行代码定义了 生成可执行文件。add_executable()
命令用于指定生成的可执行文件的名称及其源代码文件。
-
作用:它告诉 CMake 生成一个名为
test
的可执行文件,并且使用main.cpp
作为源代码文件来编译该可执行文件。 -
test
是可执行文件的名称。 -
main.cpp
是源文件,它将被编译并链接成test
可执行文件。
这行命令在构建过程中会被转换成类似以下命令的操作:
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.可以直接使用.+程序名运行