如何使用CMake为库添加链接器标志?

Bar*_*rth 30 cmake

链接二进制文件时,我可以使用CMAKE_EXE_LINKER_FLAGS添加标志(比方说-Wl,-as-needed).但是,如果我链接库,则不会考虑此额外标志.我需要像CMAKE_LIB_LINKER_FLAGS这样的东西,但我找不到它.

我应该怎么做 ?

Glu*_*ton 39

您可以使用CMAKE_SHARED_LINKER_FLAGS:

set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
Run Code Online (Sandbox Code Playgroud)

这个问题看起来很相关.

UPD
感谢@Bruce Adams指出,自从v3.13以来,CMake 为此目的特别指挥:add_link_options.

  • 请注意,CMAKE_SHARED_LINKER_FLAGS适用于动态库.对于静态库,请改用CMAKE_STATIC_LINKER_FLAGS. (4认同)

Ale*_*ing 5

这是在现代 CMake (3.13+) 中向目标添加链接器标志的方式:

# my_tgt can be an executable, library, or module.
target_link_options(my_tgt PRIVATE "LINKER:-as-needed")
Run Code Online (Sandbox Code Playgroud)

请注意,CMake 始终将标志传递给配置的编译器。因此,要将预期的链接标志转发到链接器,您必须使用LINKER:前缀。CMake 将负责将其扩展到-Wl,-as-neededGCC,并扩展到-Xlinker -as-neededClang。

请参阅此处的文档:https : //cmake.org/cmake/help/latest/command/target_link_options.html