为什么cmake_link_libraries包含静态库
Why does cmake_link_libraries include static libs?
我希望我的可执行文件再次链接共享库(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。
来自 CMake 文档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)
相关文章:
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 如果函数包含静态变量,为什么编译器不执行内联?
- 拒绝包含某些公共静态数据成员的类型
- 包含不同大小静态数组的类的多个实例
- 扩展包含静态函数的类
- 是否可以链接到,包括和使用静态库,而无需额外包含标头/文件
- C++类方法包含对静态变量的未定义引用
- 仅在满足静态constexpr时才包含代码
- 如果标头包含在另一个标头中,但不包含 CPP,则静态断言
- CMake configure_file不包含在静态库中
- 在 ONE 设置中添加附加包含目录并引用 => 指向静态库
- 将"reference"点添加到静态库项目:仍然需要包含目录
- 包含多态对象的向量:静态断言误差
- 如何静态构建并在Windows上包含WolfSSL
- 静态初始化包含功能指针的对象的constexpr std ::数组
- 是否可以存储一个在静态容器中包含unique_ptr的对象
- 创建一个静态包含ffmpeg的共享库