CMP0069¶
添加于 3.9 版本。
INTERPROCEDURAL_OPTIMIZATION
在启用时强制执行。
CMake 3.9 及更高版本倾向于在启用 INTERPROCEDURAL_OPTIMIZATION
目标属性时添加 IPO 标志,并且如果 CMake 不知道当前编译器的标志,则会产生错误。由于给定的编译器可能在其使用的所有环境中都不支持 IPO 标志,因此现在项目有责任在使用 CheckIPOSupported
模块检查支持情况,然后再启用 INTERPROCEDURAL_OPTIMIZATION
目标属性。这种方法允许项目在支持时有条件地激活 IPO。它还允许最终用户在已知支持 IPO 的环境中设置 CMAKE_INTERPROCEDURAL_OPTIMIZATION
变量,即使项目未启用该属性。
由于 CMake 3.8 及更低版本仅在 Linux 上的 Intel 编译器上遵守 INTERPROCEDURAL_OPTIMIZATION
,因此某些项目可能会无条件地启用目标属性。策略 CMP0069
为此类项目提供兼容性。
此策略在启用 IPO 属性时生效。此策略的 OLD
行为是仅为 Linux 上的 Intel 编译器添加 IPO 标志。此策略的 NEW
行为是为当前编译器添加 IPO 标志,或者如果 CMake 不知道标志,则产生错误。
此策略在 CMake 3.9 版本中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 会发出警告,并使用 OLD
行为。
注意
策略的 OLD
行为根据定义是 deprecated by definition
,并且可能会在未来的 CMake 版本中删除。
示例¶
表现得像 CMake 3.8,并且除了 Linux 上的 Intel 编译器之外,不应用任何 IPO 标志
cmake_minimum_required(VERSION 3.8)
project(foo)
# ...
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
使用 CheckIPOSupported
模块来检测当前编译器、环境和 CMake 版本是否支持 IPO。如果不支持,则产生致命错误
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
project(foo)
include(CheckIPOSupported)
check_ipo_supported()
# ...
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
仅在编译器支持时应用 IPO 标志
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
project(foo)
include(CheckIPOSupported)
# ...
check_ipo_supported(RESULT result)
if(result)
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
在没有任何检查的情况下应用 IPO 标志。如果当前环境中的编译器不支持 IPO,这可能会导致构建错误。如果 CMake 不知道当前编译器的 IPO 标志,则产生错误
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
project(foo)
# ...
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)