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

常用 CMake 内置变量合集与说明

0. 参考资料

1. CMake 官方变量文档

1. 路径类变量(与 ${CMAKE_SOURCE_DIR} 类似)

这些变量通常用来获取 CMake 当前项目的源码目录、构建目录等信息。

变量名含义示例值
CMAKE_SOURCE_DIR最顶层 CMakeLists.txt 所在目录(工程源码根目录)/home/user/myproject
PROJECT_SOURCE_DIR当前 project() 命令所在项目的顶层目录(通常等同于 CMAKE_SOURCE_DIR,但多项目时不同)/home/user/myproject
CMAKE_BINARY_DIR最顶层构建目录(build 目录)/home/user/myproject/build
PROJECT_BINARY_DIR当前 project() 命令所在项目的构建目录/home/user/myproject/build
CMAKE_CURRENT_SOURCE_DIR当前被处理的 CMakeLists.txt 所在目录(源码路径)/home/user/myproject/src/module1
CMAKE_CURRENT_BINARY_DIR当前被处理的 CMakeLists.txt 对应的构建目录/home/user/myproject/build/src/module1
CMAKE_CURRENT_LIST_DIR当前正在处理的 CMake 文件所在的文件夹路径(可以是 .cmake 脚本所在路径)/home/user/myproject/cmake/modules
CMAKE_CURRENT_LIST_FILE当前正在处理的 CMake 文件的完整路径/home/user/myproject/cmake/modules/my_config.cmake
CMAKE_CURRENT_LIST_LINE当前 CMake 文件被解析到的行号42
CMAKE_MODULE_PATH额外的 find_package() 查找 .cmake 模块的目录列表(可由用户设置)/home/user/myproject/cmake/modules

📌 路径类使用举例

message("工程根目录: ${CMAKE_SOURCE_DIR}")
message("当前源码目录: ${CMAKE_CURRENT_SOURCE_DIR}")
message("当前构建目录: ${CMAKE_CURRENT_BINARY_DIR}")

2. 编译器 / 平台信息变量

变量名含义
CMAKE_SYSTEM_NAME目标系统名称(如 Linux / Windows / Darwin
CMAKE_SYSTEM_PROCESSORCPU 架构(如 x86_64 / arm
CMAKE_C_COMPILERC 编译器路径
CMAKE_CXX_COMPILERC++ 编译器路径
CMAKE_C_COMPILER_ID, CMAKE_CXX_COMPILER_ID编译器标识(GNU/Clang/MSVC
CMAKE_CXX_STANDARD使用的 C++ 标准版本(如 11, 17
CMAKE_GENERATOR当前 CMake 使用的构建系统生成器(如 Unix Makefiles, Ninja, Visual Studio 16 2019

3. 项目信息变量

变量名含义
PROJECT_NAMEproject() 定义的项目名称
PROJECT_VERSIONproject() 定义的项目版本
PROJECT_SOURCE_DIR当前项目源码路径
PROJECT_BINARY_DIR当前项目构建路径

4. 构建结果相关变量

变量名含义
CMAKE_RUNTIME_OUTPUT_DIRECTORY可执行文件输出目录
CMAKE_LIBRARY_OUTPUT_DIRECTORY动态库输出目录
CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库输出目录
CMAKE_INSTALL_PREFIXmake install 默认安装路径(Linux 默认 /usr/local

5. 开关选项变量

变量名含义
CMAKE_BUILD_TYPE单配置生成器的构建类型(DebugReleaseRelWithDebInfoMinSizeRel
BUILD_SHARED_LIBS默认是否构建为共享库(ONOFF
CMAKE_VERBOSE_MAKEFILE是否打印编译全命令(ON 更详细)

6. 运行时环境变量

CMake 可以通过 $ENV{VAR_NAME} 访问环境变量:

message("PATH 环境变量: $ENV{PATH}")

7. 附加说明

  • 大部分变量在 CMake > Help > Variables 里都有说明:CMake 官方变量文档
  • ${VAR_NAME}变量引用语法CMAKE_SOURCE_DIR 等都是内置变量,可以直接被引用。
  • CMAKE_ 前缀几乎都是全局变量,而 PROJECT_/CMAKE_CURRENT_ 这样的是相对于当前 project / 当前目录作用域的变量。

常用变量速记表

获取值类型常用变量
工程根源码目录${CMAKE_SOURCE_DIR}
当前源码目录${CMAKE_CURRENT_SOURCE_DIR}
工程构建目录${CMAKE_BINARY_DIR}
当前构建目录${CMAKE_CURRENT_BINARY_DIR}
当前 CMake 文件路径${CMAKE_CURRENT_LIST_FILE}
当前 CMake 文件所在目录${CMAKE_CURRENT_LIST_DIR}
项目名${PROJECT_NAME}
编译器路径/类型${CMAKE_CXX_COMPILER} / ${CMAKE_CXX_COMPILER_ID}
系统信息${CMAKE_SYSTEM_NAME} / ${CMAKE_SYSTEM_PROCESSOR}

建议

如果习惯性需要查看有哪些内置变量,可在 CMakeLists.txt 里加一段:

get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})message(STATUS "${_variableName} = ${${_variableName}}")
endforeach()

这样能把当前 CMake 能访问的所有变量和值全部打印出来,方便查找。

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

相关文章:

  • Huggingface入门实践 Audio-NLP 语音-文字模型调用(一)
  • 发版混乱怎么规范
  • SSM从入门到实战:2.5 SQL映射文件与动态SQL
  • Swift 项目结构详解:构建可维护的大型应用
  • 第四章:大模型(LLM)】07.Prompt工程-(8)任务分解
  • Unreal Engine UObject
  • 龙虎榜——20250822
  • 如何使用命令行将DOCX文档转换为PDF格式?
  • 螺旋槽曲面方程的数学建模与偏导数求解
  • map和set的使⽤
  • GDSFactory环境配置(PyCharm+Git+KLayout)
  • 企业级管理平台横向越权问题及防护
  • Elasticsearch高能指南
  • SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在邮件/短信发送功能上的全面横向对比报告
  • Simulink不连续模块库(Hit Crossing/PWM/Rate Limiter/Rate Limiter Dynamic)
  • 【Day01】堆与字符串处理算法详解
  • uniapp轮播 轮播图内有定位样式
  • Oracle DB 10g 升级至 11.2.0.4报错-ORA-00132
  • Python办公之Excel(openpyxl)、PPT(python-pptx)、Word(python-docx)
  • NVM-Windows 命令大全
  • 量化交易 - 上证50利用动态PE增强模型 - python
  • React 学习笔记1 组件、State
  • 线性回归学习笔记
  • JAVA-15 (2025.08.20学习记录)
  • 集成电路学习:什么是Template Matching模版匹配
  • week3-[循环嵌套]好数
  • 基于Python与Tkinter开发的微博多功能自动化助手
  • Android焦点窗口变化导致遥控键值监听失效问题分析
  • # 重磅发布 | onecode 3.0.1 Base 源码正式开源:AI赋能的企业级开发框架
  • XXL-Job REST API 工具类完全解析:简化分布式任务调度集成