链接二进制文件时,我可以使用CMAKE_EXE_LINKER_FLAGS添加一个标志(比方说-Wl,-as-needed)。但是,如果我链接库,则不会考虑此额外标志。我需要像CMAKE_LIB_LINKER_FLAGS这样的东西,但我找不到它。
我该怎么办?
答案 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)
签出CollectionViewSource的ucm_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(库名称)