CMP0091

3.15 版中添加。

MSVC 运行时库标志由抽象选择。

针对 MSVC ABI 的编译器具有选择 MSVC 运行时库的标志。由于调试版有单独的运行时库,因此运行时库选择通常因生成配置而异。

在 CMake 3.14 及以下版本中,CMake 会自动将 MSVC 运行时库选择标志添加到默认 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,这相当于原始标志。

此策略与尚未更新以了解抽象的项目兼容。策略设置在启用编译器针对 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 行为。