我有一个 CMake 项目,其中有几个子项目,这些子项目创建使用-flto=thin.
该项目有很多与上述库相关的测试。使用 LTO 需要花费大量时间来构建测试,因此我已禁用 LTO 进行使用-fno-lto.
但我注意到,lld即使使用-fno-lto. 如果我运行链接器,--time-trace我可以看到大部分时间都花在了 LTO 上。
我的问题是:
lld只要在它链接的对象中找到 LTO 信息,就会执行 LTO。-fno-lto到编译器似乎不起作用,并且lld没有显式禁用 LTO 的参数。这就是我lto在 CMake 中的处理方式:
# Enable Thin LTO only on non-test targets.
if(ENABLE_LTO)
if (IS_TEST)
target_compile_options(${TARGET} PRIVATE -fno-lto)
# Probably pointless.
target_link_options(${TARGET} PRIVATE -fno-lto)
else()
message(STATUS "ENABLE_LTO on target ${TARGET})")
target_compile_options(${TARGET} PRIVATE -flto=thin)
target_link_options(${TARGET} PRIVATE -flto=thin -Wl,--thinlto-cache-dir=${CMAKE_BINARY_DIR}/lto.cache)
endif()
endif()
Run Code Online (Sandbox Code Playgroud)