常用 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_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 | 单配置生成器的构建类型(Debug 、Release 、RelWithDebInfo 、MinSizeRel ) |
BUILD_SHARED_LIBS | 默认是否构建为共享库(ON 或 OFF ) |
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 能访问的所有变量和值全部打印出来,方便查找。