CMake中CMAKE_CONFIGURATION_TYPES与CMAKE_BUILD_TYPE的区别及相关术语含义
CMAKE_CONFIGURATION_TYPES 与 CMAKE_BUILD_TYPE 的区别及多配置/单配置构建系统说明
一、两个变量的核心区别
CMAKE_BUILD_TYPE
- 仅适用于单配置构建系统(如Makefile、Ninja)
- 用来指定唯一固定的构建类型,可选值通常为Debug、Release、RelWithDebInfo、MinSizeRel
- 配置CMake时就得确定该值,后续编译只能生成对应类型的产物,切换类型需重新运行CMake配置
- 用法示例:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release,该build目录仅能编译Release版本
CMAKE_CONFIGURATION_TYPES
- 专门用于多配置构建系统(如Visual Studio、Xcode)
- 用来定义可选的构建类型集合,默认包含常用类型,也可自定义添加(比如
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;CustomOpt" CACHE STRING "" FORCE)) - 配置CMake时仅声明可选类型,实际编译时直接在构建工具中选择具体类型即可,无需重新运行CMake
- 用法示例:配置完成后,在VS工具栏的Debug/Release下拉框切换,就能编译对应版本的产物
二、单配置与多配置构建系统的具体含义
单配置(single-config)构建系统
- 一个构建目录仅对应一种构建类型,无法同时生成Debug和Release产物
- 切换构建类型需重新创建构建目录,或清空现有目录后重新运行CMake配置
- 代表工具:Makefile Generator、Ninja Generator
多配置(multi-config)构建系统
- 一个构建目录支持同时生成多种构建类型的产物,无需重新配置CMake
- 切换构建类型仅需在构建工具内操作,比如VS的下拉框、Xcode的scheme切换
- 代表工具:Visual Studio Generators、Xcode Generator
注意事项
在多配置系统中设置CMAKE_BUILD_TYPE会被CMake忽略;反之,单配置系统里CMAKE_CONFIGURATION_TYPES也无法生效,不要混淆使用。
内容的提问来源于stack exchange,提问作者Xudong
相关产品推荐
相关产品推荐

