CMake,静态库和链接时间优化

时间:2015-07-24 22:17:04

标签: cmake g++ lto

我尝试使用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是全新的,所以如果将它用于静态库没有意义,请告诉我。

1 个答案:

答案 0 :(得分:3)

-flto不是ar的有效选项。您应该将这些标志用于CMAKE_EXE_LINKER_FLAGS