CMP0128¶
在版本 3.22 中添加。
当此策略设置为 NEW
时
<LANG>_EXTENSIONS
初始化为CMAKE_<LANG>_EXTENSIONS
(如果已设置),否则回退到CMAKE_<LANG>_EXTENSIONS_DEFAULT
。如果
<LANG>_STANDARD
未设置或满足默认值,则扩展会被正确地启用/禁用。除非为了实现指定的模式,否则不会添加影响标准模式的标志。
OLD
行为
将
<LANG>_EXTENSIONS
初始化为CMAKE_<LANG>_EXTENSIONS
(如果已设置),否则回退到ON
。如果设置了
<LANG>_STANDARD
且<LANG>_STANDARD_REQUIRED
为OFF
,则始终添加一个标志。如果
<LANG>_STANDARD
未设置即使
<LANG>_EXTENSIONS
为OFF
,也不会禁用扩展。除了
IAR
编译器外,如果<LANG>_EXTENSIONS
为ON
,则无法启用扩展。
在以下情况下,代码可能需要为 NEW
行为进行更新
如果标准模式标志先前被 CMake 覆盖,并且在编译器检测期间未使用,则由于 CMake 不再添加默认检测到的标志,现在会生效。
此类代码应转换为以下任一种
使用
<LANG>_STANDARD
和<LANG>_EXTENSIONS
而不是手动添加标志。或者确保在编译器检测期间使用手动指定的标志。
如果禁用了扩展,但没有设置
<LANG>_STANDARD
,则 CMake 之前实际上不会禁用扩展。此类代码应更新为在需要扩展时不要禁用扩展。
如果在
<LANG>_STANDARD
由编译器的默认值满足时启用/禁用扩展,则 CMake 之前实际上不会启用/禁用扩展。此类代码应更新为设置正确的扩展模式。
如果在编译器检测期间使用影响标准模式的编译器标志(例如在 工具链 文件
中使用 CMAKE_<LANG>_FLAGS_INIT
),那么它们将影响检测到的默认 standard
和 extensions
。
此策略在 CMake 版本 3.22 中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 默认情况下不发出警告,并使用 OLD
行为。
请参阅 CMAKE_POLICY_WARNING_CMP0128
变量的文档以控制警告。
注意
策略的 OLD
行为按照 定义已弃用
,并可能在 CMake 的未来版本中移除。