CMP0069
INTERPROCEDURAL_OPTIMIZATION
is enforced when enabled.
CMake 3.9 and newer prefer to add IPO flags whenever the INTERPROCEDURAL_OPTIMIZATION
target property is enabled and produce an error if flags are not known to CMake for the current compiler. Since a given compiler may not support IPO flags in all environments in which it is used, it is now the project’s responsibility to use the CheckIPOSupported
module to check for support before enabling the INTERPROCEDURAL_OPTIMIZATION
target property. This approach allows a project to conditionally activate IPO when supported. It also allows an end user to set the CMAKE_INTERPROCEDURAL_OPTIMIZATION
variable in an environment known to support IPO even if the project does not enable the property.
Since CMake 3.8 and lower only honored INTERPROCEDURAL_OPTIMIZATION
for the Intel compiler on Linux, some projects may unconditionally enable the target property. Policy CMP0069
provides compatibility with such projects.
This policy takes effect whenever the IPO property is enabled. The OLD
behavior for this policy is to add IPO flags only for Intel compiler on Linux. The NEW
behavior for this policy is to add IPO flags for the current compiler or produce an error if CMake does not know the flags.
This policy was introduced in CMake version 3.9. CMake version 3.15.7 warns when the policy is not set and uses OLD
behavior. Use the cmake_policy()
command to set it to OLD
or NEW
explicitly.
Note
The OLD
behavior of a policy is deprecated by definition
and may be removed in a future version of CMake.
Examples
Behave like CMake 3.8 and do not apply any IPO flags except for Intel compiler on Linux:
cmake_minimum_required(VERSION 3.8) project(foo) # ... set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
Use the CheckIPOSupported
module to detect whether IPO is supported by the current compiler, environment, and CMake version. Produce a fatal error if support is not available:
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW project(foo) include(CheckIPOSupported) check_ipo_supported() # ... set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
Apply IPO flags only if compiler supports it:
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()
Apply IPO flags without any checks. This may lead to build errors if IPO is not supported by the compiler in the current environment. Produce an error if CMake does not know IPO flags for the current compiler:
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW project(foo) # ... set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.15/policy/CMP0069.html