我尝试使用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
如何运作?
答案 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
如果您无法理解每个细节,甚至可以在本地副本中添加其他输出语句。