为什么 CMAKE_BUILD_TYPE 在 Windows 上预先设置了单配置生成器?
Why is CMAKE_BUILD_TYPE pre-set with single-config generators on 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
我试图使用 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