当我启用 LTO/IPO 时,为什么 CMake 设置 -no-fat-lto-objects?

ein*_*ica 3 c compilation cmake intermediate-language lto

我正在使用 CMake 为我的 C 编译启用 IPO(过程间优化):

set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这会导致-flto添加编译器标志。然而,它还补充说-fno-fat-lto-objects:这意味着生成的目标文件将只有中间代码,而不是同时包含正确编译的代码和中间代码;这意味着链接器必须支持我的系统编译器的中间表示并且能够感知 IPO/LT​​O。

我没有要求-fno-fat-lto-objects,也不想。我可以让 CMake 不添加此选项吗?

ein*_*ica 6

我相信这是一个 CMake 错误...我现在已提交

开发人员只是做出了错误的假设,认为这就是人们想要的。