Nowe w wersji 3.13.
Dodawanie katalogów linkowania do celu.
target_link_directories(<target> <INTERFACE|PUBLIC|PRIVATE> ...])
Okre¶la ¶cieżki, w których linker powinien szukać bibliotek podczas linkowania danego celu. Każda pozycja może być ścieżką bezwzględną lub względną, przy czym ta ostatnia jest interpretowana jako względna do bieżącego katalogu źródłowego. Elementy te zostaną dodane do polecenia link.
Nazwa <target>
musi być utworzona przez polecenie takie jakadd_executable()
lub add_library()
i nie może być celemALIAS.
Słowa kluczowe INTERFACE
, PUBLIC
i PRIVATE
są wymagane do określenia zakresu elementów, które po nich następują. Elementy PRIVATE
iPUBLIC
będą wypełniać właściwość LINK_DIRECTORIES
w elemencie <target>
. Elementy PUBLIC
i INTERFACE
wypełnią właściwośćINTERFACE_LINK_DIRECTORIES
właściwość <target>
(cele IMPORTED obsługują tylko elementy INTERFACE
). Każdy element określa katalog łącza i w razie potrzeby zostanie przekonwertowany na ścieżkę absolutną przed dodaniem go do odpowiedniej właściwości. Powtarzające się wywołania tego samego <target>
dołączają elementy w kolejności, w jakiej zostały wywołane.
Jeśli podano BEFORE
, zawartość zostanie dodana do odpowiedniej właściwości zamiast dołączona.
Argumenty do target_link_directories
mogą używać “wyrażeń generatora” o składni $<...>
. Zobacz podręcznik cmake-generator-expressions(7)
, aby zapoznać się z dostępnymi wyrażeniami. Zobacz podręcznik cmake-buildsystem(7)
, aby dowiedzieć się więcej o definiowaniu właściwości systemu budowania.
Uwaga
To polecenie jest rzadko potrzebne i należy go unikać, gdy istnieją inne możliwości. Preferuj przekazywanie pełnych ścieżek bezwzględnych do bibliotek, jeśli to możliwe, ponieważ zapewnia to, że właściwa biblioteka będzie zawsze połączona.Polecenie find_library()
zapewnia pełną ścieżkę, która może być generalnie używana bezpośrednio w wywołaniach target_link_libraries()
.Sytuacje, w których ścieżka wyszukiwania biblioteki może być potrzebna, obejmują:
-
Generatory projektów, takie jak Xcode, w których użytkownik może zmienić architekturę docelową w czasie budowania, ale pełna ścieżka do biblioteki nie może być użyta, ponieważ zapewnia tylko jedną architekturę (tj.e. it is not a universal binary).
-
Biblioteki mogą mieć inne prywatne zależności biblioteczne, które oczekują, że zostaną znalezione za pomocą mechanizmów
RPATH
, ale niektóre linkery nie są w stanie w pełni zdekodować tych ścieżek (np. z powodu obecności rzeczy takich jak$ORIGIN
).
.