CMake常用内置变量

发布时间:2026/7/1 2:59:09
CMake常用内置变量 CMake常用内置变量一、项目信息变量二、目录路径变量三、编译器相关变量四、构建类型变量五、系统平台变量六、输出路径变量七、查找相关变量八、安装相关变量九、其他常用变量一、项目信息变量变量名说明示例PROJECT_NAME当前项目名称message(项目名: ${PROJECT_NAME})PROJECT_VERSION项目版本号project(HelloWorld VERSION 1.2.3)PROJECT_SOURCE_DIR项目源码根目录/home/user/HelloWorldPROJECT_BINARY_DIR项目构建根目录/home/user/HelloWorld/buildCMAKE_PROJECT_NAME顶层项目名称子项目中仍指向最顶层项目project(hello_world LANGUAGES CXX VERSION1.0)message(项目:${PROJECT_NAME})message(版本:${PROJECT_VERSION})message(源码目录:${PROJECT_SOURCE_DIR})message(项目构建根目录:${PROJECT_BINARY_DIR})message(顶层项目名称:${CMAKE_PROJECT_NAME})二、目录路径变量变量名说明示例值CMAKE_SOURCE_DIR顶层CMakeLists.txt所在目录/home/user/projectCMAKE_BINARY_DIR顶层构建目录/home/user/project/buildCMAKE_CURRENT_SOURCE_DIR当前处理的CMakeLists.txt所在目录/home/user/project/srcCMAKE_CURRENT_BINARY_DIR当前处理的构建目录/home/user/project/build/srcCMAKE_CURRENT_LIST_DIR当前处理文件的目录用于include的.cmake文件CMAKE_INSTALL_PREFIX安装路径前缀/usr/local(Linux)message(顶层CMakeLists.txt所在目录:${CMAKE_SOURCE_DIR})message(顶层构建目录:${CMAKE_BINARY_DIR})message(当前处理的CMakeLists.txt所在目录:${CMAKE_CURRENT_SOURCE_DIR})message(当前处理的构建目录:${CMAKE_CURRENT_BINARY_DIR})message(当前处理文件的目录:${CMAKE_CURRENT_LIST_DIR})message(安装路径前缀:${CMAKE_INSTALL_PREFIX})三、编译器相关变量变量名分类说明示例/可选值CMAKE_C_COMPILER编译器路径C编译器路径/usr/bin/gccCMAKE_CXX_COMPILER编译器路径C编译器路径/usr/bin/gCMAKE_C_COMPILER_ID编译器识别C编译器IDGNU,Clang,MSVCCMAKE_CXX_COMPILER_ID编译器识别C编译器ID同上CMAKE_C_FLAGS编译选项C编译选项-Wall -O2CMAKE_CXX_FLAGS编译选项C编译选项-stdc17 -WallCMAKE_CXX_STANDARD标准控制C标准版本11,14,17,20,23CMAKE_CXX_STANDARD_REQUIRED标准控制强制要求指定标准ON/OFFCMAKE_CXX_EXTENSIONS标准控制启用编译器扩展ON/OFFCMAKE_C_STANDARD标准控制C标准版本90,99,11,17CMAKE_C_STANDARD_REQUIRED标准控制强制C标准ON/OFFCMAKE_C_EXTENSIONS标准控制C编译器扩展ON/OFF# 设置 C 标准set(CMAKE_CXX_STANDARD20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)message(C编译器路径:${CMAKE_CXX_COMPILER})message(C编译器ID:${CMAKE_CXX_COMPILER_ID})message(C编译选项:${CMAKE_CXX_FLAGS})message(C标准版本:${CMAKE_CXX_STANDARD})message(强制要求指定C标准:${CMAKE_CXX_STANDARD_REQUIRED})message(C启用编译器扩展:${CMAKE_CXX_EXTENSIONS})四、构建类型变量变量名说明可选值CMAKE_BUILD_TYPE构建类型Debug,Release,RelWithDebInfo,MinSizeRelCMAKE_CONFIGURATION_TYPES多配置生成器的配置类型用于Visual Studio等CMAKE_C_FLAGS_DEBUGDebug模式C编译选项-gCMAKE_C_FLAGS_RELEASERelease模式C编译选项-O3 -DNDEBUGCMAKE_CXX_FLAGS_DEBUGDebug模式C编译选项-gCMAKE_CXX_FLAGS_RELEASERelease模式C编译选项-O3 -DNDEBUG# 设置默认构建类型if(NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Debug)endif()message(构建类型:${CMAKE_BUILD_TYPE})message(多配置生成器的配置类型:${CMAKE_CONFIGURATION_TYPES})message(Debug模式C编译选项:${CMAKE_CXX_FLAGS_DEBUG})message(Release模式C编译选项:${CMAKE_CXX_FLAGS_RELEASE})五、系统平台变量变量名说明示例值CMAKE_SYSTEM_NAME操作系统名称Linux,Windows,Darwin(macOS)CMAKE_SYSTEM_VERSION系统版本10.0.19041CMAKE_SYSTEM_PROCESSOR处理器架构x86_64,AMD64,arm64WIN32Windows平台TRUE/FALSEUNIXUnix-like平台TRUE/FALSEAPPLEmacOS平台TRUE/FALSELINUXLinux平台TRUE/FALSEMSVCMicrosoft Visual CTRUE/FALSEif(WIN32)message(Windows平台)elseif(UNIX AND NOT APPLE)message(Linux平台)elseif(APPLE)message(macOS平台)endif()message(操作系统名称:${CMAKE_SYSTEM_NAME})message(系统版本:${CMAKE_SYSTEM_VERSION})message(处理器架构:${CMAKE_SYSTEM_PROCESSOR})六、输出路径变量变量名说明示例CMAKE_RUNTIME_OUTPUT_DIRECTORY可执行文件输出目录${PROJECT_BINARY_DIR}/binCMAKE_LIBRARY_OUTPUT_DIRECTORY动态库输出目录${PROJECT_BINARY_DIR}/libCMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库输出目录${PROJECT_BINARY_DIR}/libEXECUTABLE_OUTPUT_PATH(旧)可执行文件路径不推荐使用LIBRARY_OUTPUT_PATH(旧)库文件路径不推荐使用# 统一设置输出目录set(CMAKE_RUNTIME_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/bin)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/lib)set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/lib)message(可执行文件输出目录:${CMAKE_RUNTIME_OUTPUT_DIRECTORY})message(动态库输出目录:${CMAKE_LIBRARY_OUTPUT_DIRECTORY})message(静态库输出目录:${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})七、查找相关变量变量名说明示例CMAKE_MODULE_PATH查找.cmake模块的路径${PROJECT_SOURCE_DIR}/cmakeCMAKE_PREFIX_PATH查找包的前缀路径/usr/local;/optCMAKE_INCLUDE_PATH头文件搜索路径额外的include路径CMAKE_LIBRARY_PATH库文件搜索路径额外的库路径# 添加自定义cmake模块路径list(APPEND CMAKE_MODULE_PATH${PROJECT_SOURCE_DIR}/cmake)# 添加包搜索路径list(APPEND CMAKE_PREFIX_PATH/opt/mylib)message(查找.cmake模块的路径:${CMAKE_MODULE_PATH})message(查找包的前缀路径:${CMAKE_PREFIX_PATH})message(头文件搜索路径:${CMAKE_INCLUDE_PATH})message(库文件搜索路径:${CMAKE_LIBRARY_PATH})八、安装相关变量变量名说明默认值(Linux)CMAKE_INSTALL_PREFIX安装根目录/usr/localCMAKE_INSTALL_BINDIR可执行文件安装目录binCMAKE_INSTALL_LIBDIR库文件安装目录libCMAKE_INSTALL_INCLUDEDIR头文件安装目录includeCMAKE_INSTALL_DATADIR数据文件安装目录sharemessage(安装根目录:${CMAKE_INSTALL_PREFIX})message(可执行文件安装目录:${CMAKE_INSTALL_BINDIR})message(库文件安装目录:${CMAKE_INSTALL_LIBDIR})message(头文件安装目录:${CMAKE_INSTALL_INCLUDEDIR})message(数据文件安装目录:${CMAKE_INSTALL_DATADIR})九、其他常用变量变量名说明示例CMAKE_VERBOSE_MAKEFILE显示详细编译信息ON/OFFBUILD_SHARED_LIBS默认构建共享库ON/OFFCMAKE_POSITION_INDEPENDENT_CODE启用PICON/OFFCMAKE_EXPORT_COMPILE_COMMANDS生成compile_commands.jsonON/OFFCMAKE_COLOR_DIAGNOSTICS彩色诊断信息ON/OFF# 生成编译命令数据库(用于clangd等)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 详细输出set(CMAKE_VERBOSE_MAKEFILE ON)# 位置无关代码set(CMAKE_POSITION_INDEPENDENT_CODE ON)message(显示详细编译信息:${CMAKE_VERBOSE_MAKEFILE})message(默认构建共享库:${BUILD_SHARED_LIBS})message(启用PIC:${CMAKE_POSITION_INDEPENDENT_CODE})