gpt4 book ai didi

visual-studio - Visual Studio 的 Cmake 生成器不设置 CMAKE_CONFIGURATION_TYPES

转载 作者:行者123 更新时间:2023-12-04 06:08:39 25 4
gpt4 key购买 nike

Cmake FAQ

other
places
建议查看CMAKE_CONFIGURATION_TYPES识别多配置生成器。我发现了几个不起作用的问题(例如 this one )。问题似乎是第一次调用 cmake 时没有设置变量。

我用以下文件进行了测试

cmake_minimum_required(VERSION 2.6)

if(CMAKE_CONFIGURATION_TYPES)
message("Multi-configuration generator")
else()
message("Single-configuration generator")
endif()

project(foo)

并这样称呼它
mkdir build
cd build
cmake -G "Visual Studio 12 2013" ..

并得到 Single-configuration generator .

如何区分当前生成器是否支持多种配置?

最佳答案

已编辑 : 添加了关于检查和更改的信息CMAKE_CONFIGURATION_TYPES
检查和更改CMAKE_CONFIGURATION_TYPES
接受 this question 的建议您可以检查并更改 CMAKE_CONFIGURATION_TYPES , 但是 注意有一个错误0015577: The 'project' command overwrites CMAKE_CONFIGURATION_TYPES在 CMake 3.2.2 中确实打破了初始 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 所见内容的更多详细信息:
  • CMAKE_CONFIGURATION_TYPESEnableLanguage() 设置在 cmGlobalVisualStudio7Generator.cxx
  • CMake: In which Order are Files parsed (Cache, Toolchain, …)?
  • 关于visual-studio - Visual Studio 的 Cmake 生成器不设置 CMAKE_CONFIGURATION_TYPES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31661264/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com