Ich bin neu bei CMake und ein bisschen verwirrt mit den Schlüsselwörtern PUBLIC, PRIVATE und INTERFACE target_link_libraries()
. In der Dokumentation wird erwähnt, dass sie verwendet werden können, um sowohl die Verbindungsabhängigkeiten als auch die Verbindungsschnittstelle in einem Befehl anzugeben.
Was bedeuten eigentlich Linkabhängigkeiten und Linkschnittstelle?
Antworten:
Wenn Sie eine gemeinsam genutzte Bibliothek erstellen und Ihre Quell-CPP-Dateien # die Header einer anderen Bibliothek enthalten (z. B. QtNetwork), Ihre Header-Dateien jedoch keine QtNetwork-Header enthalten, ist QtNetwork eine
PRIVATE
Abhängigkeit.Wenn Ihre Quelldateien und Ihre Header die Header einer anderen Bibliothek enthalten, handelt es sich um eine
PUBLIC
Abhängigkeit.Wenn Ihre Header-Dateien, aber nicht Ihre Quelldateien die Header einer anderen Bibliothek enthalten, handelt es sich um eine
INTERFACE
Abhängigkeit.Andere Build-Eigenschaften
PUBLIC
undINTERFACE
Abhängigkeiten werden an konsumierende Bibliotheken weitergegeben. http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirementsquelle
PUBLIC
oderPRIVATE
wichtig? Was ändert sich?PRIVATE
die Verwendung werden Ihre Abhängigkeiten nicht zu Projekten hinzugefügt, die mit Ihrer Bibliothek verknüpft sind. Es ist sauberer und vermeidet mögliche Konflikte zwischen Ihren Abhängigkeiten und denen Ihrer Benutzer.PUBLIC
Abhängigkeit haben eineINTERFACE
Abhängigkeit.