CMake初探篇一
CMake初探篇一
元·唐珙《题龙阳县青草湖》
西风吹老洞庭波,一夜湘君白发多。
醉后不知天在水,满船清梦压星河。

1. 什么是 CMake
CMake 构建工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。
2. 构建流程
- 创建构建目录:保持源代码目录整洁。
- 使用 CMake 生成构建文件:配置项目并生成适合平台的构建文件。
- 编译和构建:使用生成的构建文件执行编译和构建。
- 清理构建文件:删除中间文件和目标文件。
1、创建构建目录
CMake 推荐使用 "Out-of-source" 构建方式,即将构建文件放在源代码目录之外的独立目录中。
这样可以保持源代码目录的整洁,并方便管理不同的构建配置。因此可以通过下面命令来进行创建build构建目录,同时进入build目录。
mkdir build
cd build
2、使用 CMake 生成构建文件
在构建目录中运行 CMake,以生成适合当前平台的构建系统文件(例如 Makefile、、Ninja 构建文件、Visual Studio 工程文件等)。
因为此时在build目录,而进行CMake进行构建的指令需要找到CMakeLists.txt所在的目录,因此需要返回到上一级。
cmake ..
在实战中,可以设用快捷指令来代替第一步和第二步的构成。
cmake -S . -B build
-S .:指定源目录为当前目录(.)-B build
:指定构建目录为build` 子目录
cmake -S . -B build
// 等同于下面语句
mkdir build
cd build
cmake ..
cd ..
3、编译和构建
使用生成的构建文件进行编译和构建。
# 使用 CMake 构建(推荐)
cmake --build build
// --build 是进行构建的动作,后面的build是包含makefile等生成文件的目录。
4、清理构建文件
# 3. 清理构建文件
cmake --build build --target clean
3. CMake快捷帮助
1. 基础帮助命令
# 查看版本
cmake --version
# 查看简要帮助, 包含一下关键子的用法和简要的帮助指令
cmake --help
cmake -h
# 查看详细帮助(分类显示),非常多,不建议在cmd中查看
cmake --help-full
2. 帮助分类查看
# 查看特定类别帮助
cmake --help-command-list # 所有命令列表
cmake --help-variable-list # 所有变量列表
cmake --help-property-list # 所有属性列表
cmake --help-module-list # 所有模块列表
cmake --help-policy-list # 所有策略列表
3. 查找特定帮助
# 查看特定命令的完整帮助
cmake --help-command add_executable
cmake --help-command find_package
cmake --help-command target_link_libraries
# 搜索包含特定关键词的命令
cmake --help-command-list | grep -i target #, 不可用
cmake --help-command-list | findstr target # Windows,查找包含 'target' 的命令
4. 帮助查看技巧
使用管道和 grep/findstr
# Linux/Mac, 未验证
cmake --help-command-list | grep -i "add_"
cmake --help-variable-list | grep "CMAKE_CXX"
cmake --help | grep -A5 "^-G"
# Windows PowerShell
cmake --help-command-list | Select-String "target"
cmake --help-variable-list | findstr CMAKE
# Windows CMD
cmake --help-command-list | findstr "add_"
4. 实际案例
1. 入门案例:单个源文件
编写 main.cpp 和 CMakeLists.txt
main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, Hakuon" << endl;
system("pause");
return 0;
}
CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.15)
# 项目信息
project (HakuSingleDemo)
# 指定生成目标
add_executable(HakuSingleDemo main.cpp)
生成效果

这是一个最简单的单文件CMake程序。CMake 的构建流程分为几个主要步骤,从设置项目到生成和执行构建命令。
2. 同一目录,多个源文件
如果在CMakeLists.txt中存在多个头文件和CPP文件,则可以更改CMakeLists.tx中的使用方法。
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (HakuSingleDemo)
# 指定生成目标
add_executable(HakuSingleDemo main.cpp C1.cpp C2.cpp)
也可以快捷使用下面这个方法:
aux_source_directory(<dir> <variable>)命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。这样,CMake 会将当前目录所有源文件的文件名赋值给变量
DIR_SRCS,再指示变量DIR_SRCS中的源文件需要编译成一个名称为 HakuSingleDemo的可执行文件。
参考链接
本文来自博客园,作者:Hakuon,转载请注明原文链接:https://www.cnblogs.com/Hakuon/p/19314044
浙公网安备 33010602011771号