我正在使用CMake为我的C编译启用IPO(跨过程优化):
set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
如预期的那样,这会添加一个
-flto
编译器标志。但是,它还会添加-fno-fat-lto-objects
:这意味着生成的目标文件仅包含中间代码,而不是经过正确编译和中间代码的两者;这也意味着链接器必须支持我的系统编译器的中间表示,并且要具备IPO/LTO感知能力。我没有要求添加
-fno-fat-lto-objects
,也不想要它。我能否让CMake不添加此选项?
-flto=full
选项,而对于较早的clang编译器,则使用-flto
选项。 - einpoklumif(CMAKE_C_COMPILER MATCHES "GNU")
更改为类似于if(CMAKE_C_COMPILE_OPTIONS_IPO MATCHES "-fno-fat-lto-objects")
的内容,然后从中使用正则表达式删除-fno-fat-lto-objects
或类似的选项。 - KamilCuk