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 以前不会实际启用/禁用扩展。这样的代码应该更新为设置正确的扩展模式。
如果在编译器检测过程中使用了会影响标准模式的编译器标志(例如,在 a toolchain file
中使用 CMAKE_<LANG>_FLAGS_INIT
),那么它们会影响检测到的默认 standard
和 extensions
。
此策略在 CMake 版本 3.22 中引入。它可以由 cmake_policy()
或 cmake_minimum_required()
设置。如果它未设置,那么 CMake 默认情况下不发出警告,并使用 OLD
行为。
请参阅 CMAKE_POLICY_WARNING_CMP0128
变量的文档以控制警告。
注意
策略的 OLD
行为 根据定义 已弃用
,并且可能会在 CMake 的未来版本中被移除。