我正在尝试使用cmake和g++创建带有链接时间优化的静态库。
set(
CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra -pedantic -std=c++11"
)
if (CMAKE_COMPILER_IS_GNUCXX)
set(
CMAKE_STATIC_LINKER_FLAGS_RELEASE
"${CMAKE_STATIC_LINKER_FLAGS_RELEASE} -flto -fwhole-program"
)
endif()
add_library(
mylib STATIC
mylib.cpp
)
但是当运行典型的
cmake -DCMAKE_BUILD_TYPE=Release ..
make
我得到以下错误:
/usr/bin/ar: two different operation options specified
link.txt文件包含以下命令:
/usr/bin/ar cq libmylib.a -flto -fwhole-program CMakeFiles/mylib.cpp.o
/usr/bin/ranlib libmylib.a
从我运行ar --help
的理解,-flto -fwhole-program
应该在第一行libmylib.a
之前。但是我不知道如何强制CMake把它放在那里。
我的假设正确吗?我该如何解决这个问题?
编辑:我想补充一点,我对使用LTO是完全陌生的,所以如果将它用于静态库没有意义,请告诉我。
-flto
不是ar
的有效选项。您应该使用这些标志来代替CMAKE_EXE_LINKER_FLAGS
。