是否存在跨平台方法设置CMake生成项目的构建类型,适配Visual Studio场景?
CMAKE_BUILD_TYPE对Visual Studio项目无效的原因与解决方案
核心原因
CMake的生成器分为两类,CMAKE_BUILD_TYPE仅对其中一类生效:
- 单配置生成器:比如Makefile、Ninja,一次配置只能生成一种构建类型的编译规则,构建阶段无法切换类型,配置阶段靠
CMAKE_BUILD_TYPE指定构建类型 - 多配置生成器:比如Visual Studio、Xcode,配置阶段会生成所有支持的构建类型的编译规则,构建时才选择实际使用的类型,因此配置阶段设置的
CMAKE_BUILD_TYPE完全不生效
你遇到的情况就是典型的多配置生成器的特性:你写的那段默认设置CMAKE_BUILD_TYPE为Release的逻辑,仅对单配置生成器有效,对Visual Studio生成的解决方案没有影响,所以你会看到实际生成的配置和你设置的CMAKE_BUILD_TYPE不一致。
便捷设置构建类型的方法
方法1:构建阶段指定类型(最常用,适配VS原生逻辑)
配置阶段不需要额外设置任何变量,生成解决方案后两种操作可选:
- 打开Visual Studio解决方案,在顶部工具栏的构建配置下拉菜单直接选择需要的类型(Release/Debug等)后执行构建
- 用命令行构建时指定配置类型,命令如下:
cmake --build . --config Release
方法2:限制支持的构建类型(仅需固定类型时使用)
如果希望VS解决方案里只保留你需要的构建类型,不需要每次手动选择,可以在CMakeLists.txt的project()命令之前添加如下配置:
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "Supported build types" FORCE)
设置完成后,生成的VS解决方案里只会有Release一个构建选项,不需要额外切换。
方法3:切换为单配置生成器(仅项目不需要适配VS原生多配置逻辑时使用)
如果你一定要通过CMAKE_BUILD_TYPE控制构建类型,可以把生成器切换为Ninja等单配置生成器,这类生成器会直接读取CMAKE_BUILD_TYPE的取值来决定构建类型。
内容的提问来源于stack exchange,提问作者rbaleksandar
相关产品推荐
相关产品推荐

