常用 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

📌 路径类使用举例

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

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

变量名 含义
CMAKE_SYSTEM_NAME 目标系统名称(如 Linux / Windows / Darwin
CMAKE_SYSTEM_PROCESSOR CPU 架构(如 x86_64 / arm
CMAKE_C_COMPILER C 编译器路径
CMAKE_CXX_COMPILER C++ 编译器路径
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_NAME project() 定义的项目名称
PROJECT_VERSION project() 定义的项目版本
PROJECT_SOURCE_DIR 当前项目源码路径
PROJECT_BINARY_DIR 当前项目构建路径

4. 构建结果相关变量

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

5. 开关选项变量

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

6. 运行时环境变量

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

cmake 复制代码
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 里加一段:

cmake 复制代码
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName} = ${${_variableName}}")
endforeach()

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