2014-01-14 2 views
2

Если у меня есть файл, который связывает my_library.lib против нескольких других .lib файлов, таких как:CMake LINK_PRIVATE и его «наследство»

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) 

будет «защищать» lib1, lib2 и другие библиотеки я только для компиляции my_library?

ответ

2

LINK_PUBLIC: делает транзитивные зависимости текущей привязанной цели видимыми для других целей, которые будут связаны с текущим. Таким образом, lib1 и lib2 будут связаны вместе с my_library, когда my_library связан с чем-то другим.

LINK_PRIVATE: делает переходные зависимости текущего связанного объекта невидимым с другими объектами, которые будут связаны с текущим. Таким образом, lib1 и lib2 не будут связаны вместе с my_library, когда my_library связан с чем-то другим.

В заключение, когда some_other_library будет связан с чем-то другим, его зависимости не будут видны для тех целей, к которым он связан, из-за окончательного LINK_PRIVATE.

Смежные вопросы