首页 > 解决方案 > CMake 与 Visual Studio 2017 - RelWithDebInfo 配置

问题描述

我使用 Visual Studio 2017。我有一个解决方案,它具有不同的调试和发布配置选项,例如运行时库。我想创建一个可与 Visual Studio 生成器一起使用的 CMakeLists.txt,例如:

cmake -G "Visual Studio 15 2017" ..
cmake --build . --config RelWithDebInfo --parallel 8

我需要在 CMakeLists.txt 中设置正确的运行时库。我应该在 Visual Studio 中使用 Release 配置中的设置吗?CMAKE_BUILD_TYPE=RelWithDebInfo 如何映射到 Visual Studio 配置?

标签: cmakevisual-studio-2017

解决方案


我需要在 CMakeLists.txt 中设置正确的运行时库。

执行此操作的规范方法是使用CMAKE_MSVC_RUNTIME_LIBRARY变量,该变量设置目标属性的默认值MSVC_RUNTIME_LIBRARY(允许针对每个目标进行控制)。

例如,要使用静态运行时库,您可以在 CMakeLists.txt 中编写以下内容(或者更好的是,来自工具链或预设):

set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

如果活动配置是“调试”,则生成器表达式在生成时$<CONFIG:Debug> 返回1然后这将减少到$<1:Debug>减少到Debug。在其他配置上,它将减少为$<0:Debug>,然后是空字符串。您可以使用这些生成器表达式实现您自己的自定义逻辑。genex$<IF:cond,then,else>在这里很有用。

请参阅文档CMAKE_MSVC_RUNTIME_LIBRARYhttps ://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html

CMAKE_BUILD_TYPE=RelWithDebInfo 如何映射到 Visual Studio 配置?

CMAKE_BUILD_TYPE使用 Visual Studio 生成器进行设置绝对没有任何作用,因为它是一个多配置生成器。它将为CMAKE_CONFIGURATION_TYPES列表变量中的每个名称创建一个配置。有许多_<CONFIG>后缀变量可以调整特定于配置的设置,例如标志和目标名称后缀。

完整列表可以在文档中找到,这里(搜索<CONFIG>):https ://cmake.org/cmake/help/latest/manual/cmake-variables.7.html


推荐阅读