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

时间:2014-07-02 13:47:20

标签: cmake

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

我该怎么办?

6 个答案:

答案 0 :(得分:36)

您可以使用CMAKE_SHARED_LINKER_FLAGS之类的:

set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")

This question看起来很相似。

<强> UPD
感谢@Bruce Adams指出,自从v3.13以来,CMake为此目的add_link_options {{1}}。

答案 1 :(得分:4)

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

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

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

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

答案 2 :(得分:2)

签出CollectionViewSourceucm_add_linker_flags宏 - 它处理将链接器标志附加到相应的cmake变量

答案 3 :(得分:2)

在cmake 3.10.2中,建议的答案 set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") 没有为我工作。我采用的解决方法是改用set_target_properties

我的CMakeLists.txt文件具有以下一行: add_library(libraryname MODULE a.cc b.cc c.cc)

在该行之后,我添加了以下内容: set_target_properties(libraryname PROPERTIES LINK_FLAGS "-Wl,-znodelete")

答案 4 :(得分:0)

看起来这个问题与我在CLION中遇到的问题有关。解决了它:添加:

{set(CMAKE_CXX_STANDARD_LIBRARIES -ljpeg)} 

到CMakeLists.txt

答案 5 :(得分:0)

target_link_libraries(target-name PRIVATE -lexpat)

我用它来链接我项目中的 XML 依赖项。将 -lexpat 替换为 -l(库名称)