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