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 以前实际上不会禁用扩展。此类代码应更新为在需要时不禁用扩展。
如果在编译器的默认 CMake 满足
<LANG>_STANDARD时启用/禁用扩展,以前实际上不会启用/禁用扩展。应更新此类代码以设置正确的扩展模式。
如果在编译器检测期间使用了影响标准模式的编译器标志(例如在 a toolchain file using CMAKE_<LANG>_FLAGS_INIT)那么它们将影响检测到的默认 标准 和 扩展。
与许多政策不同,CMake 版本 |release|当政策未设置时 不 发出警告,只是使用“旧”行为。使用 cmake_policy() 命令将其显式设置为 OLD 或 NEW。请参阅 CMAKE_POLICY_WARNING_CMP0128 变量的文档以控制警告。
备注
策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。