【问题标题】:How does CMake check for IPO support?CMake 如何检查 IPO 支持?
【发布时间】:2017-12-22 17:28:18
【问题描述】:

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

【问题讨论】:

  • 根据模块的文档,您可以将附加选项OUTPUT <output> 传递给宏并检查它失败的原因。 (或者,您可以删除 RESULT 选项,因此 CMake 将打印失败原因)。

标签: gcc cmake clang lto


【解决方案1】:

在您的 CheckIPO 电话中添加 OUTPUT output

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
如果您难以理解每个细节,您甚至可以在本地副本中添加额外的输出语句。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 2011-10-17
    • 2011-08-12
    • 1970-01-01
    • 2020-11-04
    • 2012-06-14
    • 1970-01-01
    • 2012-10-28
    • 2015-03-15
    相关资源
    最近更新 更多