1

我正在尝试使用 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工作的?

4

1 回答 1

3

添加OUTPUT output到您的 CheckIPO 电话:

check_ipo_supported(RESULT ipo_supported OUTPUT output)

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

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

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

于 2017-12-22T20:03:03.270 回答