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