CheckIPOSupported

Added in version 3.9.

Check whether the compiler supports an interprocedural optimization (IPO/LTO). Use this before enabling the INTERPROCEDURAL_OPTIMIZATION target property.

check_ipo_supported
check_ipo_supported([RESULT <result>] [OUTPUT <output>]
                    [LANGUAGES <lang>...])

Options are:

RESULT <result>

Set <result> variable to YES if IPO is supported by the compiler and NO otherwise. If this option is not given then the command will issue a fatal error if IPO is not supported.

OUTPUT <output>

Set <output> variable with details about any error.

LANGUAGES <lang>...

Specify languages whose compilers to check.

The following languages are supported:

  • C

  • CXX

  • CUDA

    Added in version 3.25.

  • Fortran

If this option is not given, the default languages are picked from the current ENABLED_LANGUAGES global property.

Note

To use check_ipo_supported(), policy CMP0069 must be set to NEW; otherwise, a fatal error will occur.

Added in version 3.13: Support for Visual Studio generators.

Added in version 3.24: The check uses the caller's CMAKE_<LANG>_FLAGS and CMAKE_<LANG>_FLAGS_<CONFIG> values. See policy CMP0138.

Examples

check_ipo_supported() # fatal error if IPO is not supported
set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
# Optional IPO. Do not use IPO if it's not supported by compiler.
check_ipo_supported(RESULT result OUTPUT output)
if(result)
  set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
  message(WARNING "IPO is not supported: ${output}")
endif()