2014-09-25 16 views
29

Jestem nowy w CMAKE i nieco mylony ze słowami kluczowymi PUBLICZNY, PRYWATNY i INTERFEJS związany z target_link_libraries. Dokumentacja wspomina, że ​​mogą one być używane do określenia zarówno zależności łącza, jak i interfejsu łącza w jednym poleceniu.CMake target_link_libraries Interfejsy Zależności

Co właściwie oznaczają zależności i interfejs linków?

+0

Podobne pytanie: http://stackoverflow.com/questions/26243169/cmake-target-include-catalogories-meaning-of-scope – TManhente

Odpowiedz

66

Jeśli tworzysz bibliotekę współdzieloną, a źródłowe pliki cpp # zawierają nagłówki innej biblioteki (Powiedzmy, na przykład QtNetwork), ale pliki nagłówkowe nie zawierają nagłówków QtNetwork, to QtNetwork jest zależnością PRIVATE.

Jeśli pliki źródłowe i nagłówki zawierają nagłówki innej biblioteki, jest to zależność PUBLIC.

Jeśli pliki nagłówkowe, ale nie pliki źródłowe, zawierają nagłówki innej biblioteki, jest to zależność INTERFACE.

Inne właściwości kompilacji zależności PUBLIC i INTERFACE są propagowane do bibliotek zużywających. http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements

+7

To jest najbardziej jednoznaczne wyjaśnienie tego pytania, jakie kiedykolwiek słyszałem. Chciałbym, żeby [cmake documentation] (https://cmake.org/cmake/help/latest/command/target_link_libraries.html) było jasne! :-) – Ela782

+1

Dzięki za wyjaśnienie Rozumiem teraz znaczenie, ale dlaczego ma znaczenie określenie "PUBLICZNE" lub "PRYWATNE"? Co to zmienia? – user3667089

+1

Użycie 'PRIVATE' nie dodaje twoich zależności do projektów łączących się z twoją biblioteką. Jest czystszy i pozwala uniknąć konfliktów między twoimi zależnościami a użytkownikiem. – user2658323

Powiązane problemy