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
和Fortran
。
当 CMP0069
设置为 OLD
时,使用此模块没有意义,因此在这种情况时,模块将返回错误。有关详细信息,请参阅策略 CMP0069
。
在版本 3.13 中添加: 新增了对 Visual Studio 生成器的支持。
在版本 3.24 中添加: 检查使用调用方的 CMAKE_<LANG>_FLAGS
和 CMAKE_<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()