CMake初探篇一

CMake初探篇一


元·唐珙《题龙阳县青草湖》

西风吹老洞庭波,一夜湘君白发多。
醉后不知天在水,满船清梦压星河。

33

1. 什么是 CMake

CMake 构建工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。

2. 构建流程

  1. 创建构建目录:保持源代码目录整洁。
  2. 使用 CMake 生成构建文件:配置项目并生成适合平台的构建文件。
  3. 编译和构建:使用生成的构建文件执行编译和构建。
  4. 清理构建文件:删除中间文件和目标文件。

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)

生成效果

C1

这是一个最简单的单文件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的可执行文件。

参考链接

CMake入门

CMake菜鸟教程

posted on 2025-12-05 23:52  Hakuon  阅读(0)  评论(0)    收藏  举报