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>...

指定要检查其编译器的语言。支持的语言为 CCXXFortran

CMP0069 设置为 OLD 时,使用此模块没有意义,因此在这种情况时,模块将返回错误。有关详细信息,请参阅策略 CMP0069

在版本 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()