首页 > 解决方案 > 库目标的 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是可执行文件。现在,如果我写:lib2e1

target_link_libraries(lib1 PRIVATE lib2)
target_link_libraries(e1 PRIVATE lib1)

当我构建时一定会e1被链接吗?lib2e1

注意:如果答案因lib1/lib2是静态库还是动态库而异,请说出来。

标签: cmakebuildlinkerlibrariesbuild-dependencies

解决方案


当我构建 e1 时,e1 是否必须与 lib2 链接?

是的。

e1不会有INCLUDE_DIRECTORIES也不COMPILE_DEFINITIONSPUBLIC来自lib2


推荐阅读