当前位置: 首页 > ai >正文

CMake 命令行参数全解析(2025年更新版)


CMake 作为跨平台构建系统的核心工具,其命令行参数对项目配置、构建流程控制至关重要。以下基于最新实践和官方文档整理 CMake 的完整参数体系:


一、核心配置参数

​1 ​变量定义参数​

  • -D <var>:<type>=<value>
    动态设置 CMake 缓存变量,支持布尔值、字符串、路径等类型。例如:
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON
  • CMAKE_BUILD_TYPE:控制构建类型(Debug/Release/RelWithDebInfo)

  • BUILD_SHARED_LIBS:全局控制生成动态库或静态库

​2 ​生成器选择​

  • -G <generator>
    指定构建系统生成器,支持多平台适配:
cmake -G "Ninja"          # 生成 Ninja 构建文件
cmake -G "Visual Studio 17 2022"  # 生成 VS 解决方案

常用选项:Unix MakefilesXcodeNinja Multi-Config


二、路径控制参数

1 ​​源码与构建目录​

  • -S <path>
    显式指定源码根目录(含 CMakeLists.txt 的路径)
  • -B <path>
    设定构建目录(二进制输出目录),避免污染源码:
cmake -S src -B build

↑ 替代传统用法 mkdir build && cd build && cmake ..

2 ​​输出路径定制​

通过变量定义可执行文件/库的存放路径:

  • CMAKE_RUNTIME_OUTPUT_DIRECTORY
    可执行文件输出目录(如 bin/
  • CMAKE_LIBRARY_OUTPUT_DIRECTORY
    动态库输出目录(如 lib/
  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY
    静态库输出目录(如 lib/static/

示例:

cmake -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=bin -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=lib

三、构建与编译控制

1 ​​构建命令​

  • --build <dir>

触发实际编译过程,替代直接调用 makeninja

cmake --build build --parallel 8 --clean-first
  • --target:指定编译目标(如 install 或自定义目标)

  • --config:多配置生成器下的构建类型选择(如 --config Debug

2 ​​编译器选项​

通过变量传递编译标志:

  • CMAKE_CXX_FLAGS

C++ 编译选项(如优化级别 -O3

  • CMAKE_EXE_LINKER_FLAGS

可执行文件链接选项(如 -fsanitize=address
示例:

cmake -DCMAKE_CXX_FLAGS="-Wall -Wextra"

四、安装与部署参数

1 安装路径配置​**​

  • CMAKE_INSTALL_PREFIX

定义 make install 的默认安装路径:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local

支持分组件安装(如头文件、库文件分离)

2 ​​安装命令扩展​

  • 通过 install() 命令在 CMakeLists.txt 中定义安装规则:
install(TARGETS myapp DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)

支持 RUNTIME(可执行文件)、LIBRARY(动态库)、ARCHIVE(静态库)分类


五、调试与日志参数

1 ​​日志级别控制​

  • --log-level=<level>

设置日志详细程度(ERROR, WARNING, NOTICE, STATUS, VERBOSE, DEBUG):

cmake --log-level=DEBUG

​2 ​跟踪与诊断​

  • --trace

打印 CMake 执行过程的详细步骤

  • --debug-output

显示调试信息(如变量展开过程)


六、其他实用参数

​1 ​工具链文件​

  • -DCMAKE_TOOLCHAIN_FILE=<path>

指定交叉编译工具链配置文件(常用于嵌入式开发)

cmake -DCMAKE_TOOLCHAIN_FILE=arm-gcc.cmake

2 ​​模块路径扩展​

  • -DCMAKE_MODULE_PATH=<path>

添加自定义 CMake 模块搜索路径(如第三方库的 Find*.cmake 文件)

3 ​清空缓存​

  • -U <glob_expr>

删除匹配的缓存变量(支持通配符 *?):

cmake -U "BUILD_*"  # 删除所有以 BUILD_ 开头的缓存变量

完整参数速查表

参数类别关键参数示例作用文档来源
变量定义-D, -U
目录控制-S, -B, CMAKE_*_OUTPUT_DIRECTORY
构建控制--build, --target, --config
安装配置CMAKE_INSTALL_PREFIX, install()
调试工具--trace, --debug-output, --log-level
高级定制CMAKE_TOOLCHAIN_FILE, CMAKE_MODULE_PATH

注:本文档整合自 CMake 3.28+ 版本特性,部分参数可能因版本差异存在变化,建议参考官方文档获取最新信息。如需完整参数列表,可通过 cmake --help-full 命令查看。

http://www.xdnf.cn/news/5724.html

相关文章:

  • Clang实现C++文件分析,含Python实战
  • 使用webservice生成节假日/双休日/工作日信息
  • 蚁群算法赋能生鲜配送:MATLAB 实现多约束路径优化
  • PowerBI基础
  • bunsenlabs系统详解
  • java 中 DTO 和 VO 的核心区别
  • 基于SpringBoot的校园周边美食探索及分享平台【附源码+数据库+文档下载】
  • JSON 实体属性映射的最佳实践
  • 人脸识别的应用场景变化
  • 牛客周赛 Round 92
  • vue2关闭eslint
  • 如何避免 JavaScript 中常见的闭包陷阱?
  • 如何指定conda环境打包成docker镜像
  • fastp数据质控
  • 远程命令执行RCE概述
  • C++编程练习,认识面向对象权限,如何进行封装
  • 北大夫妇携花皙蔻向西藏昂仁县第二小学捐赠爱心图书室
  • C++ - 堆栈RAII(资源获取就是初始化)详解
  • 星际篮球争霸赛/MVP争夺战 - 华为OD机试真题(A卷、Java题解)
  • ESP32-S3 with ESP-IDF v5.4.1 LVGL 9.2.0 Custom memory allocator
  • AWS EC2源代码安装valkey命令行客户端
  • Linux电源管理(五),发热管理(thermal),温度控制
  • IEEE出版|2025年算法、软件与网络安全国际学术会议(ASNS2025)
  • MySQL 学习(七)undo log、redo log、bin log 的作用以及持久化机制
  • 输出重定向
  • 双向链表专题
  • 51 单片机头文件 reg51.h 和 reg52.h 详解
  • element plus el-table多选框跨页多选保留
  • 2-巯基烟酰甘氨酸 晒后美白新配方,解决皮肤暗沉
  • M8040A/M8199助力数据中心收发信机测试