CMake跨平台命令

在 CMake 跨平台工作流中,cmake ..(生成构建系统)和 cmake --build .(执行构建)是最核心的两个跨平台命令,它们抽象了不同平台的构建工具(如 Linux 的 make、Windows 的 msbuild、macOS 的 xcodebuild 等)。以下是围绕「配置→构建→测试→安装→打包→清理」全流程的跨平台命令集合,覆盖常见场景:

一、配置阶段:生成构建系统(对应 cmake ..

作用:在构建目录(如 build)中生成平台对应的构建文件(Makefile、VS 项目、Xcode 工程等),是跨平台构建的第一步。

命令 用途 示例
cmake <source_dir> 基础配置:生成构建系统文件 1. 在源码目录外创建 build 目录并进入:
mkdir build && cd build
2. 指向源码目录(.. 表示父目录为源码根目录):
cmake ..
cmake <source_dir> -DCMAKE_BUILD_TYPE=<type> 指定构建类型(单配置生成器) cmake .. -DCMAKE_BUILD_TYPE=Release # 生成 Release 模式的 Makefile
cmake <source_dir> -DCMAKE_INSTALL_PREFIX=<path> 指定默认安装路径 cmake .. -DCMAKE_INSTALL_PREFIX=/opt/myapp # 安装到 /opt/myapp(Linux/macOS)
cmake <source_dir> -G <generator> 手动指定生成器(可选) cmake .. -G Ninja # 用 Ninja 生成构建文件(需先安装 Ninja)
cmake <source_dir> -D<var>=<value> 传递自定义变量 cmake .. -DBUILD_TESTS=ON -DBUILD_STATIC=OFF # 启用测试,禁用静态库

二、构建阶段:编译代码(对应 cmake --build .

作用:执行实际编译,生成可执行文件/库,替代平台特定命令(makemsbuildxcodebuild 等),跨平台统一语法

命令 用途 示例
cmake --build <build_dir> 基础构建:编译所有目标 build 目录中执行:
cmake --build . # 编译所有目标
cmake --build <build_dir> --target <target> 构建指定目标 cmake --build . --target MyApp # 仅编译 MyApp 可执行文件
cmake --build <build_dir> --config <type> 指定构建类型(多配置生成器) cmake --build . --config Release # VS/Xcode 生成 Release 版本
cmake --build <build_dir> --parallel <N> 并行编译(加速) cmake --build . --parallel 8 # 8 线程并行编译
cmake --build . -j 8 # 简写形式
cmake --build <build_dir> --clean-first 先清理再构建 cmake --build . --clean-first --config Debug # 清理后重新编译 Debug 版本

三、测试阶段:运行测试(跨平台替代 ctest 直接调用)

CMake 集成 CTest 作为跨平台测试工具,替代手动运行测试程序,统一测试命令。

命令 用途 示例
ctest 运行所有测试 build 目录中执行:
ctest # 运行所有测试
ctest -C <config> 指定测试配置(多配置生成器) ctest -C Release # 运行 Release 版本的测试
ctest -R <regex> 运行匹配名称的测试 ctest -R utils # 运行名称含 “utils” 的测试
ctest -j <N> 并行运行测试 ctest -j 4 # 4 个测试并行运行
ctest --output-on-failure 测试失败时显示输出 ctest --output-on-failure -C Debug # Debug 测试失败时显示日志

四、安装阶段:部署文件(跨平台替代 make install

作用:将编译好的目标(可执行文件、库、头文件等)安装到指定路径,替代平台特定的安装命令(make installmsbuild INSTALL.vcxproj 等)。

命令 用途 示例
cmake --install <build_dir> 基础安装:按规则部署文件 build 目录中执行:
cmake --install . # 安装到默认前缀(如 /usr/local)
cmake --install <build_dir> --prefix <path> 自定义安装路径 cmake --install . --prefix ~/myapp # 安装到用户目录(Linux/macOS)
cmake --install . --prefix C:\myapp # Windows 安装路径
cmake --install <build_dir> --config <type> 指定安装配置(多配置生成器) cmake --install . --config Release --prefix /opt/myapp # 安装 Release 版本到 /opt
cmake --install <build_dir> --component <component> 安装指定组件 cmake --install . --component runtime # 仅安装运行时组件(可执行文件/动态库)

五、打包阶段:生成安装包(跨平台替代 make package

通过 CPack 生成跨平台安装包(如 .exe.deb.dmg 等),统一打包命令。

命令 用途 示例
cmake --build <build_dir> --target package 构建后直接打包 cmake --build . --target package --config Release # 生成 Release 版本安装包
cpack 直接打包(需先构建) build 目录中执行:
cpack -C Release # 生成 Release 安装包
cpack -G <generator> 指定打包生成器 cpack -G ZIP # 生成跨平台 ZIP 压缩包
cpack -G DEB -C Release # Linux 生成 DEB 包

六、清理阶段:删除构建产物(跨平台替代 make clean

作用:删除编译生成的中间文件和目标文件,保持构建目录干净。

命令 用途 跨平台说明 示例
cmake --build <build_dir> --target clean 清理构建产物 替代 make cleanmsbuild /t:Clean 等,跨平台统一清理命令。 cmake --build . --target clean # 清理所有构建产物
rm -rf <build_dir>/*(Linux/macOS)
del /f/s/q <build_dir>\*(Windows cmd)
彻底清理构建目录 若清理不彻底(如缓存文件),可直接删除构建目录内容后重新配置。 Linux/macOS:
cd build && rm -rf *
Windows cmd:
cd build && del /f/s/q *

跨平台命令优势总结

这些命令的核心价值是屏蔽平台差异

  • 无需记忆 make(Linux)、msbuild(Windows)、xcodebuild(macOS)等工具的语法;

  • 同一套命令可在所有系统上运行(如 cmake --build . -j 8 在任何平台都表示 8 线程编译);

  • 通过选项(如 --config--prefix)灵活适配不同场景,无需修改 CMakeLists.txt。

实际工作流示例(跨平台通用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 创建并进入构建目录
mkdir -p build && cd build

# 2. 配置(指定 Release 模式和安装前缀)
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/myapp

# 3. 8 线程编译
cmake --build . -j 8

# 4. 运行测试(失败时显示日志)
ctest --output-on-failure -C Release

# 5. 安装到 /opt/myapp
cmake --install .

# 6. 生成 ZIP 安装包
cpack -G ZIP -C Release