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