已编辑:添加了有关检查和更改的信息CMAKE_CONFIGURATION_TYPES
检查和更改CMAKE_CONFIGURATION_TYPES
接受this question 的建议,您可以检查并更改CMAKE_CONFIGURATION_TYPES,但请注意 CMake 3.2.2 中有一个错误0015577: The 'project' command overwrites CMAKE_CONFIGURATION_TYPES 确实打破了最初的这种行为VS 解决方案生成(使用 CMake 3.3.0 修复):
cmake_minimum_required(VERSION 3.3)
project(foo NONE)
if(CMAKE_CONFIGURATION_TYPES)
message("Multi-configuration generator")
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "My multi config types" FORCE)
else()
message("Single-configuration generator")
endif()
enable_language(C CXX)
预设CMAKE_CONFIGURATION_TYPES
如果您只需要针对多配置环境的一组配置,您可以这样做(感谢@Tsyvarev 的建议):
cmake_minimum_required(VERSION 2.8)
# NOTE: Only used in multi-configuration environments
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "My multi config types" FORCE)
project(foo)
没有多配置环境会忽略它。但请注意其他 CMake 模块,如 findBoost.cmake、findCUDA.cmake 可能依赖于 CMAKE_CONFIGURATION_TYPES 为空的单一配置环境(再次感谢 @Tsyvarev 的提示)。
因此,更好的解决方案是为所有受支持的生成器添加工具链文件。它们通常很有用,因为您可以在那里处理所有工具链/生成器特定的部分。
这是我的VSToolchain.txt的摘录:
# Reduce the config types to only Debug and Release
SET(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
# Standard is a console app. If you need a windows app, use WIN32 define in add_executable
set(CMAKE_WIN32_EXECUTABLE 0 CACHE INTERNAL "")
CMAKE_WIN32_EXECUTABLE 只是用来显示我在 Visual Studio 工具链文件中放入的设置类型。
这里建议另一种 CMake 命令行解决方案:How to create cmake build configuration without debug symbols and without optimizations?
只检查CMAKE_CONFIGURATION_TYPES
如果您只想检查 CMake 在 CMAKE_CONFIGURATION_TYPES 中设置的内容:
我刚刚使用 Visual Studio 2013 和 MinGW/GCC 测试了您的上述代码(两者都有空的 build 目录)。您只需稍作改动,然后将检查移到project() 命令之后:
project(foo)
message("CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES}")
if(CMAKE_CONFIGURATION_TYPES)
message("Multi-configuration generator")
else()
message("Single-configuration generator")
endif()
我得到了 VS2013:
CMAKE_CONFIGURATION_TYPES Debug;Release;MinSizeRel;RelWithDebInfo
Multi-configuration generator
对于 GCC:
CMAKE_CONFIGURATION_TYPES
Single-configuration generator
有关 CMake 所见内容的更多详细信息: