CMake的预定义内置变量

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


CMake 的预定义内置变量是 CMake 在配置阶段(执行 cmake 命令时)自动生成的变量,无需用户手动声明,用于提供环境信息、控制构建行为或配置项目细节。这些变量按用途可分为多个类别,以下是常见分类及每类中高频使用的变量详解:

一、平台与系统检测类

用于识别目标系统(操作系统、架构、位数等),是跨平台项目适配的核心变量。

变量名作用说明取值示例/类型
WIN32标识目标系统是否为 Windows(包括 32 位和 64 位 Windows)。布尔值(TRUE/FALSE
UNIX标识目标系统是否为类 Unix 系统(包括 Linux、macOS、FreeBSD 等)。布尔值(TRUE/FALSE
APPLE标识目标系统是否为 Apple 系统(macOS、iOS、iPadOS 等)。布尔值(TRUE/FALSE
CMAKE_SYSTEM_NAME存储目标系统的名称(字符串),用于精确判断系统类型。字符串("Windows"/"Linux"/"Darwin"(macOS)等)
CMAKE_SYSTEM_PROCESSOR存储目标处理器架构(如 x86、ARM 等)。字符串("x86_64"/"arm64"/"i386"等)
CMAKE_SIZEOF_VOID_P存储 void* 类型的字节数,用于判断系统位数(32 位为 4,64 位为 8)。整数(4 或 8)

二、构建路径与目录类

用于定位项目源代码、构建文件、输出文件等路径,是管理项目目录结构的核心变量。

变量名作用说明示例路径
CMAKE_SOURCE_DIR顶级 CMakeLists.txt 所在的目录(整个项目的根目录),不受子项目影响。/home/user/project
CMAKE_BINARY_DIR构建目录(执行 cmake 命令时的当前目录,通常是 build 目录)。/home/user/project/build
PROJECT_SOURCE_DIR当前 project() 命令所在的目录(若在子项目中,指子项目的源代码目录)。/home/user/project/submodule
PROJECT_BINARY_DIR当前项目的构建目录(子项目的构建目录,通常在顶级构建目录下对应子目录)。/home/user/project/build/submodule
CMAKE_CURRENT_SOURCE_DIR当前处理的 CMakeLists.txt 所在的目录(随脚本位置动态变化)。/home/user/project/src
CMAKE_CURRENT_BINARY_DIR当前 CMakeLists.txt 对应的构建目录(生成的中间文件存放处)。/home/user/project/build/src
CMAKE_INSTALL_PREFIX安装路径的前缀(make install 时文件的默认安装根目录)。默认为 /usr/local(Unix)或 C:/Program Files(Windows)

三、编译器与语言配置类

用于指定编译器路径、语言标准、编译选项等,控制代码编译过程。

变量名作用说明取值示例
CMAKE_C_COMPILERC 编译器的路径(自动检测或用户指定)。/usr/bin/gccC:/MSVC/cl.exe
CMAKE_CXX_COMPILERC++ 编译器的路径(自动检测或用户指定)。/usr/bin/g++C:/MSVC/cl.exe
CMAKE_C_STANDARD指定 C 语言标准(如 C99、C11)。整数(99/11/17 等)
CMAKE_CXX_STANDARD指定 C++ 语言标准(如 C++11、C++17、C++20)。整数(11/17/20 等)
CMAKE_C_STANDARD_REQUIRED是否强制要求指定的 C 标准(若不支持则报错)。布尔值(ON/OFF,默认 OFF
CMAKE_CXX_STANDARD_REQUIRED是否强制要求指定的 C++ 标准(若不支持则报错)。布尔值(ON/OFF,默认 OFF
CMAKE_C_FLAGSC 编译器的全局编译选项(适用于所有构建类型)。-Wall -O2(GCC)
CMAKE_CXX_FLAGSC++ 编译器的全局编译选项(适用于所有构建类型)。-Wall -std=c++17(GCC)
CMAKE_CXX_FLAGS_DEBUGDebug 模式下的 C++ 编译选项(如启用调试符号)。-g -O0(GCC)
CMAKE_CXX_FLAGS_RELEASERelease 模式下的 C++ 编译选项(如优化)。-O3 -DNDEBUG(GCC)

四、构建类型与模式类

用于控制构建的模式(如 Debug/Release)、多配置生成器行为等。

变量名作用说明取值示例
CMAKE_BUILD_TYPE单配置生成器(如 Makefile、Ninja)指定构建类型(仅在配置时生效)。字符串("Debug"/"Release"/"RelWithDebInfo"等)
CMAKE_CONFIGURATION_TYPES多配置生成器(如 Visual Studio、Xcode)指定支持的构建类型。列表("Debug;Release;MinSizeRel"
BUILD_SHARED_LIBS控制 add_library 命令的默认行为:ON 生成共享库(.so/.dll),OFF 生成静态库(.a/.lib)。布尔值(ON/OFF,默认 OFF

五、目标文件输出类

用于指定可执行文件、库文件的输出目录,统一管理构建产物。

变量名作用说明示例路径
CMAKE_RUNTIME_OUTPUT_DIRECTORY可执行文件(.exe 等)的输出目录(适用于所有构建类型)。${CMAKE_BINARY_DIR}/bin
CMAKE_LIBRARY_OUTPUT_DIRECTORY共享库(.so/.dll)的输出目录(适用于所有构建类型)。${CMAKE_BINARY_DIR}/lib
CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库(.a/.lib)的输出目录(适用于所有构建类型)。${CMAKE_BINARY_DIR}/lib
CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUGDebug 模式下可执行文件的输出目录(覆盖通用设置)。${CMAKE_BINARY_DIR}/bin/debug
CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASERelease 模式下可执行文件的输出目录(覆盖通用设置)。${CMAKE_BINARY_DIR}/bin/release

六、Qt 相关自动处理类

用于 Qt 项目中自动处理 moc(元对象编译器)、uic(UI 编译器)、rcc(资源编译器),简化 Qt 项目配置。

变量名作用说明取值类型
CMAKE_AUTOMOC自动运行 moc 处理 Qt 元对象代码(如 Q_OBJECT 宏)。布尔值(ON/OFF
CMAKE_AUTOUIC自动运行 uic 处理 .ui 文件(Qt 设计器生成的 UI 文件)。布尔值(ON/OFF
CMAKE_AUTORCC自动运行 rcc 处理 .qrc 资源文件。布尔值(ON/OFF
CMAKE_INCLUDE_CURRENT_DIR自动将当前 CMakeLists.txt 所在目录添加到编译器的包含路径(便于 Qt 生成文件引用)。布尔值(ON/OFF

七、其他常用功能类

用于控制构建流程的细节(如输出颜色、编译数据库等)。

变量名作用说明取值类型/示例
CMAKE_COLOR_MAKEFILE控制生成的 Makefile 是否支持彩色输出(提升构建日志可读性)。布尔值(ON/OFF,默认 ON
CMAKE_EXPORT_COMPILE_COMMANDS生成 compile_commands.json 文件(用于 IDE 或工具解析编译选项,如 Clangd)。布尔值(ON/OFF
CMAKE_VERBOSE_MAKEFILE控制 Makefile 构建时是否输出详细命令(调试构建流程用)。布尔值(ON/OFF,默认 OFF

总结

CMake 的预定义内置变量是项目配置的“基础设施”,按用途可分为平台检测、路径管理、编译器配置、构建输出等类别。掌握这些变量的含义和用法,能帮助你更灵活地控制跨平台项目的构建流程,适配不同系统、编译器和构建需求。实际使用中,可通过 cmake --system-information 命令查看当前环境下所有预定义变量的取值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值