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