CMake如何检查IPO支持?

时间:2017-12-22 17:28:19

标签: gcc cmake clang lto

我尝试使用CMake 3.10使用IPO构建C ++应用程序,我在CMakeLists.txt中有以下内容:

include(CheckIPOSupported)
check_ipo_supported(RESULT ipo_supported)
if(ipo_supported)
    message("-- IPO is supported!")
    set_property(TARGET target PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
    message(WARNING "IPO is not supported!")
endif()

我在CentOS 4机器上使用配置了启用IPO的GCC 7.2(默认),我能够使用-flto标志编译一个简单的测试程序。然而,CMake报告不支持IPO。在多台其他计算机上,支持相同的CMake脚本报告IPO。

如果我知道CMake如何检查IPO支持,那将有助于我理解问题所在。 CMake的模块CheckIPOSupported如何运作?

1 个答案:

答案 0 :(得分:1)

OUTPUT output添加到您的CheckIPO电话:

check_ipo_supported(RESULT ipo_supported OUTPUT output)

您可以打印output以获取不支持的原因。

通常,失败的测试会在CMake构建目录中的文件CMakeFiles/CMakeError.log中留下痕迹。检查相应的条目以了解更多测试失败的原因。

最后,回答你的实际问题CheckIPOSupported如何工作:阅读代码!您可以在线找到https://gitlab.kitware.com/cmake/cmake/blob/master/Modules/CheckIPOSupported.cmake
如果您无法理解每个细节,甚至可以在本地副本中添加其他输出语句。