如果我有一个my_library.lib文件,它链接到其他几个.lib文件,例如:

add_library( my_library ...)
target_link_libraries( my_library LINK_PUBLIC lib1 lib2 ...)

如果我现在将此my_library.lib文件链接到另一个带有的库(它也需要lib1,lib2等。这是上面代码中LINK_PUBLIC的原因)LINK_PRIVATE
target_link_libraries( some_other_library LINK_PRIVATE my_library )

我将“保护”我仅用于编译my_library 的lib1,lib2和其他库吗?

最佳答案

LINK_PUBLIC:使当前链接目标的传递依赖关系对其他将与当前目标链接的目标可见。因此,当lib1与其他内容链接时,lib2my_library将与my_library链接在一起。
LINK_PRIVATE:使当前链接目标的可传递依赖项对于将要与当前目标链接的其他目标不可见。因此,当lib1与其他内容链接时,lib2my_library将不会与my_library一起链接。

总而言之,当some_other_library将链接到其他对象时,由于最终的LINK_PRIVATE,将看不到它所链接的那些目标的依赖性。

关于c++ - CMake LINK_PRIVATE及其 “inheritance”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21125362/

10-12 23:57