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
行为。
注意
策略的 OLD
行为根据定义已弃用 并且 可能 在 将来 版本的 CMake 中 被 删除
。