CMP0091¶
添加于版本 3.15。
MSVC 运行时库标志由一个抽象概念选择。
针对 MSVC ABI 的编译器具有选择 MSVC 运行时库的标志。运行时库选择通常随构建配置而变化,因为调试构建有一个单独的运行时库。
在 CMake 3.14 及更低版本中,MSVC 运行时库选择标志由 CMake 自动添加到默认的 CMAKE_<LANG>_FLAGS_<CONFIG>
缓存条目中。这允许用户编辑他们的缓存条目以调整标志。然而,对于想要以编程方式选择不同运行时库的项目,这些默认标志的存在是有问题的。特别是,它需要对 CMAKE_<LANG>_FLAGS_<CONFIG>
变量进行字符串编辑,并了解 CMake 内置的默认值,以便可以替换它们。
CMake 3.15 及更高版本更倾向于将 MSVC 运行时库选择标志从默认的 CMAKE_<LANG>_FLAGS_<CONFIG>
值中移除,而是提供一个一流的抽象概念。CMAKE_MSVC_RUNTIME_LIBRARY
变量和 MSVC_RUNTIME_LIBRARY
目标属性可以被设置来选择 MSVC 运行时库。如果它们未被设置,则 CMake 使用默认值 MultiThreaded$<$<CONFIG:Debug>:Debug>DLL
,这等同于原始标志。
此策略为尚未更新以了解此抽象概念的项目提供兼容性。策略设置在第一个 project()
或 enable_language()
命令生效,该命令启用了编译器目标为 MSVC ABI 的语言。
注意
一旦策略在项目的顶层生效,则必须在整个树中使用该选择。在子目录中具有嵌套项目的项目中,请务必一起转换所有内容。
此策略的 OLD
行为是将 MSVC 运行时库标志放在默认的 CMAKE_<LANG>_FLAGS_<CONFIG>
缓存条目中,并忽略 CMAKE_MSVC_RUNTIME_LIBRARY
抽象概念。此策略的 NEW
行为是不将 MSVC 运行时库标志放在默认缓存条目中,而是使用该抽象概念。
此策略在 CMake 3.15 版本中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 不发出警告,并使用 OLD
行为。
注意
策略的 OLD
行为根据定义已被弃用
,并可能在 CMake 的未来版本中移除。