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 等同于原始标志。

此策略提供与尚未更新以了解抽象的项目的兼容性。该策略设置从第一个 project()enable_language() 命令开始生效,该命令启用其编译器以 MSVC ABI 为目标的语言。

备注

一旦策略在项目的顶部生效,该选择就必须在整个树中使用。在子目录中具有嵌套项目的项目中,请确保将所有内容一起转换。

此策略的“旧”行为是将 MSVC 运行时库标志放置在默认的 CMAKE_<LANG>_FLAGS_<CONFIG> 缓存条目中并忽略 CMAKE_MSVC_RUNTIME_LIBRARY 抽象。此策略的“新”行为是*不*将 MSVC 运行时库标志放在默认缓存条目中,而是使用抽象。

此策略是在 CMake 版本 3.15 中引入的。使用 cmake_policy() 命令将其显式设置为 OLDNEW。与许多政策不同,CMake 版本 |release|当此策略未设置且仅使用“旧”行为时*不*发出警告。

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。