为什么 CMAKE_BUILD_TYPE 在 Windows 上预设为单配置生成器?

问题描述

我试图使用 CMake 将认构建类型设置为 Release,使用描述的方法 here(直接来自马口)。此方法检查是否已设置 CMAKE_BUILD_TYPE,并且仅当其值为空时才将其设置为 Release。这在 macOS 和 Linux 上运行良好。但是,在 Windows 上,CMAKE_BUILD_TYPE 已从认设置设置为 Debug。为什么会发生这种情况,我该如何解决,以便可以可靠地将认构建类型设置为 Release


要自己尝试一下,请创建一个简单的 CMake 文件

# CMakeLists.txt

project(Foo)
message(STATUS "Build type is '${CMAKE_BUILD_TYPE}'")

然后与单个配置生成器一起使用,例如 cmake . -G"NMake Makefiles"cmake . -GNinja在这两种情况下,在 Windows 上我看到:Build type is 'Debug'。在其他平台上,我看到 Build type is ''

解决方法

CMAKE_BUILD_TYPE 正在 project 行设置。在此之前它是空的。因此,可以在此行之前检查CMAKE_BUILD_TYPE是否为空并设置默认值。

这里有一个关于这个的讨论:https://gitlab.kitware.com/cmake/cmake/-/issues/19401