为什么cmake_link_libraries包含静态库?

时间:2015-04-17 10:30:17

标签: c++ linker cmake shared-libraries static-libraries

我希望我的可执行文件再次链接一个共享库(libmy_so.so),而该库又使用静态库(libmy_static_lib.a)构建。当我做的时候

target_link_libraries(my_exe my_so)

我在编译时看到cmake在构建行上添加了libmy_static_lib.a。这不是我想要的东西,我不明白为什么需要它。有没有办法解决? LINK_PRIVATE似乎没有任何区别。

我使用CMake 2.8.9。

1 个答案:

答案 0 :(得分:5)

来自CMake documentation for target_link_libraries

target_link_libraries(<target> [item1 [item2 [...]]]
                      [[debug|optimized|general] <item>] ...)
     

[...]   默认情况下,使用此签名,库依赖项是可传递的。当此目标链接到另一个目标时,链接到此目标的库也将显示在另一个目标的链接行上。

解决方案是使用允许手动指定传递行为的target_link_libraries签名:

# we explicitly state that the static lib should not propagate
# transitively to targets depending on my_so
target_link_libraries(my_so PRIVATE my_static_lib)

# nothing has to change for the exe
target_link_libraries(my_exe my_so)