cmake - 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 配置?
解决方案
我需要在 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_LIBRARY
:https ://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
推荐阅读
- angular - bypassSecurityTrustHtml 在使用 [innerHtml] 显示 html 时禁用锚标记
- macos - 保护 Flask/Celery 应用程序的 localhost 端口,该应用程序在 MacOS 上的 Docker 中的 0.0.0.0 上本地运行
- javascript - 如何将查询字符串值传递到 iframe src
- c# - 面临的问题 值不能为空。参数名称:g
- python - Python If/else 混淆
- shell - 如何将 shell 脚本回显到 Jenkinsfile 等 groovy 界面中的文件
- javascript - Typescript child 与 parent 具有相同的道具,有没有更清洁的方法?
- javascript - 电子邮件正文的每个空格之间有 %20
- laravel - Laravel - 删除缓存文件 - 权限不足
- node.js - 有没有办法在一条路线中读取变量并在另一条路线中传递该值?