cmake - 库目标的 target_link_libraries PRIVATE 语义
问题描述
在target_link_libraries 的 CMake 文档中,它说:
target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <item>... [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
PUBLIC、PRIVATE 和 INTERFACE 关键字可用于在一个命令中指定链接依赖关系和链接接口。
下面的库和目标
PUBLIC
链接到链接接口,并成为链接接口的一部分。下面的库和目标PRIVATE
链接到链接接口,但不是链接接口的一部分。以下库INTERFACE
附加到链接接口,不用于链接。
我不太明白这如何适用于库目标。
假设我的语言是 C 或 C++;该目标是库,并且该目标lib1
是可执行文件。现在,如果我写:lib2
e1
target_link_libraries(lib1 PRIVATE lib2)
target_link_libraries(e1 PRIVATE lib1)
当我构建时一定会e1
被链接吗?lib2
e1
注意:如果答案因lib1
/lib2
是静态库还是动态库而异,请说出来。
解决方案
当我构建 e1 时,e1 是否必须与 lib2 链接?
是的。
但e1
不会有INCLUDE_DIRECTORIES
也不COMPILE_DEFINITIONS
是PUBLIC
来自lib2
。
推荐阅读
- node.js - MongoDB 查询在 $or 中具有多个变体,其中至少 x 语句必须匹配
- swift - 如何通过 getBytes() 读出 .rgba16Float MTLTexture
- rust - std::marker::Unpin 不满意
- javascript - 将 3d 文本旋转 javascript 文件转换为特定于角度组件的打字稿文件
- python - 如何生成具有特定形状值的数组?
- azure-devops - 在 Azure DevOps 上设置电子邮件通知
- android - 如何从android(kotlin)中的地点ID获取地点详细信息
- elasticsearch - ELK-Stack 中未使用/处理的索引模板
- cucumber-junit - 我们可以像 TestNG 一样在 Junit 中使用软断言吗...?
- asp.net - 在 Asp.net 中是否会使用 Wordpress 主题?