CheckIPOSupported

在 3.9 版本中加入。

检查编译器是否支持过程间优化 (IPO/LTO)。在使用 INTERPROCEDURAL_OPTIMIZATION 目标属性之前使用此命令。

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

选项包括

RESULT <result>

如果编译器支持 IPO,则将 <result> 变量设置为 YES,否则设置为 NO。如果未提供此选项,则在不支持 IPO 时,该命令将发出致命错误。

OUTPUT <output>

使用有关任何错误的详细信息设置 <output> 变量。

LANGUAGES <lang>...

指定要检查其编译器的语言。

支持以下语言

  • C

  • CXX

  • CUDA

    在 3.25 版本中加入。

  • Fortran

如果未提供此选项,则默认语言将从当前的 ENABLED_LANGUAGES 全局属性中选取。

注意

要使用 check_ipo_supported(),策略 CMP0069 必须设置为 NEW;否则,将发生致命错误。

在 3.13 版本中加入: 对 Visual Studio 生成器的支持。

在 3.24 版本中加入: 此检查使用调用者的 CMAKE_<LANG>_FLAGSCMAKE_<LANG>_FLAGS_<CONFIG> 值。请参阅策略 CMP0138

示例

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()