Cmake 库依赖关系的传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cmake 库依赖关系的传递相关的知识,希望对你有一定的参考价值。

参考技术A

在linux平台下,按照正常来说,在编译C时,只需要链接B就好了。
但是使用Cmake编译时,会报找不到libA.so的错误。
通过cmake生成的gcc命令看到,编译命令确实将A也链接了进来。

那么问题来了,为什么cmake会将B的依赖加到我C的头上?

原因在于 target_link_libraries() 命令。
熟悉cmake的朋友都知道这是设置链接库的命令。

但其实它的原型是:

可以通过PRIVATE | PUBLIC | INTERFACE 设置依赖的传递性.

摘抄一下官方文档的描述:

其实大白话就是

好了,大家以后再使用 target_link_libraries() 的时候就可以加上 PRIVATE 关键字,这样C就不会链接A了。

需要注意
根据CMP0023描述:
加关键字和不加关键字的用法不可以混合使用,如下面一起使用就会报错。

以上是关于Cmake 库依赖关系的传递的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CMake 中正确创建目标之间的依赖关系?

在现代CMake项目中存档静态依赖项

在 CMake 中具有依赖关系的自定义对象

android 创建Model 解决无法依赖传递问题 , 实现 sdk 依赖关系的传递

android 创建Model 解决无法依赖传递问题 , 实现 sdk 依赖关系的传递

android 创建Model 解决无法依赖传递问题 , 实现 sdk 依赖关系的传递