我希望我的可执行文件再次链接一个共享库(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。
答案 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)