2014-01-14 21 views
2

如果我有一個鏈接對其它幾個.lib文件像my_library.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:使當前鏈接的目標的傳遞依賴關係對其他要與當前目標鏈接的目標可見。所以當my_library與別的東西連接時,lib1lib2將與my_library連接。

LINK_PRIVATE:使當前鏈接目標的傳遞依賴關係對其他要與當前鏈接目標鏈接的目標不可見。因此和lib2將不會連接my_librarymy_library與別的鏈接。

總之,當some_other_library將與別的鏈接時,由於最終的LINK_PRIVATE,它的依賴關係將不會被看到它所鏈接的目標。