Neu in Version 3.13.
Hinzufügen von Linkverzeichnissen zu einem Target.
target_link_directories(<target> <INTERFACE|PUBLIC|PRIVATE> ...])
Spezifiziert die Pfade, in denen der Linker nach Bibliotheken suchen soll, wenn er ein bestimmtes Target linkt. Jedes Element kann ein absoluter oder relativer Pfad sein, wobei letzteres als relativ zum aktuellen Quellverzeichnis interpretiert wird. Diese Elemente werden dem Link-Befehl hinzugefügt.
Das benannte <target>
muss durch einen Befehl wieadd_executable()
oder add_library()
erstellt worden sein und darf keinALIAS -Ziel sein.
Die Schlüsselwörter INTERFACE
, PUBLIC
und PRIVATE
sind erforderlich, um den Geltungsbereich der ihnen folgenden Elemente zu spezifizieren. Die Elemente PRIVATE
und PUBLIC
füllen die Eigenschaft LINK_DIRECTORIES
von <target>
. PUBLIC
und INTERFACE
füllen die Eigenschaft INTERFACE_LINK_DIRECTORIES
von <target>
(IMPORTED-Ziele unterstützen nur INTERFACE
-Elemente).Jedes Element gibt ein Link-Verzeichnis an und wird gegebenenfalls in einen absoluten Pfad konvertiert, bevor es der entsprechenden Eigenschaft hinzugefügt wird. Wiederholte Aufrufe desselben <target>
fügen Elemente in der aufgerufenen Reihenfolge an.
Wenn BEFORE
angegeben wird, wird der Inhalt der entsprechenden Eigenschaft vorangestellt, anstatt angehängt zu werden.
Argumente für target_link_directories
können “Generatorausdrücke” mit der Syntax $<...>
verwenden. Siehe das cmake-generator-expressions(7)
Handbuch für verfügbare Ausdrücke. Siehe das cmake-buildsystem(7)
Handbuch für mehr über die Definition von Buildsystem-Eigenschaften.
Hinweis
Dieser Befehl ist selten notwendig und sollte vermieden werden, wenn es andere Möglichkeiten gibt. Der Befehl find_library()
liefert den vollständigen Pfad, der im Allgemeinen direkt in Aufrufen von target_link_libraries()
verwendet werden kann.
-
Projektgeneratoren wie Xcode, bei denen der Benutzer die Zielarchitektur zur Erstellungszeit wechseln kann, aber ein vollständiger Pfad zu einer Bibliothek nicht verwendet werden kann, weil sie nur eine Architektur zur Verfügung stellt (d.h. keine universelle Binärdatei), sind Beispiele für Situationen, in denen ein Bibliothekssuchpfad benötigt wird.
-
Bibliotheken können selbst andere private Bibliotheksabhängigkeiten haben, die über
RPATH
-Mechanismen gefunden werden sollen, aber einige Linker sind nicht in der Lage, diese Pfade vollständig zu dekodieren (z. B. aufgrund des Vorhandenseins von Dingen wie$ORIGIN
).