Új a 3.13-as verzióban.
Linkkönyvtárak hozzáadása egy targethez.
target_link_directories(<target> <INTERFACE|PUBLIC|PRIVATE> ...])
Meghatározza az elérési utakat, amelyekben a linkelőnek könyvtárakat kell keresnie, amikor egy adott targetet linkel. Minden elem lehet abszolút vagy relatív elérési útvonal,az utóbbit az aktuális forráskönyvtárhoz viszonyítva értelmezi. Ezek az elemek hozzá lesznek adva a link parancshoz.
A megnevezett <target>
-nek egy olyan paranccsal kell létrejönnie, mint aadd_executable()
vagy a add_library()
, és nem lehetALIAS cél.
A INTERFACE
, PUBLIC
és PRIVATE
kulcsszavak szükségesek az őket követő elemek hatókörének meghatározásához. A PRIVATE
és PUBLIC
elemek feltöltik a <target>
LINK_DIRECTORIES
tulajdonságát. Az PUBLIC
és INTERFACE
elemek a <target>
INTERFACE_LINK_DIRECTORIES
tulajdonságát töltik fel (az IMPORTED célok csak a INTERFACE
elemeket támogatják).Minden elem egy linkkönyvtárat ad meg, és szükség esetén abszolút elérési úttá konvertálódik, mielőtt a megfelelő tulajdonsághoz hozzáadjuk. Ugyanannak a <target>
-nek az ismételt hívása a hívás sorrendjében csatolja az elemeket.
Ha BEFORE
van megadva, akkor a tartalom előzetesen hozzá lesz csatolva a vonatkozó tulajdonsághoz ahelyett, hogy hozzá lenne csatolva.
A target_link_directories
-nak az argumentumai használhatnak “generátor kifejezéseket “a $<...>
szintaxissal. A rendelkezésre álló kifejezéseket lásd a cmake-generator-expressions(7)
kézikönyvben. A cmake-buildsystem(7)
kézikönyvben olvashat bővebben a buildsystem tulajdonságok definiálásáról.
Megjegyzés
Ez a parancs ritkán szükséges, és kerülendő, ha van más lehetőség is. Ahol lehetséges, inkább a könyvtárak teljes abszolút elérési útvonalát adja meg, mivel ez biztosítja, hogy mindig a megfelelő könyvtár lesz linkelve.A find_library()
parancs megadja a teljes elérési utat, amely általában közvetlenül használható a target_link_libraries()
hívásában.Olyan helyzetek, amikor szükség lehet a könyvtár keresési útvonalára:
-
Projektgenerátorok, mint az Xcode, ahol a felhasználó építésekor célarchitektúrát válthat, de egy könyvtár teljes elérési útvonalát nem lehet használni, mert csak egy architektúrát biztosít (i.azaz nem univerzális bináris).
-
A könyvtáraknak maguknak is lehetnek más privát könyvtárfüggőségeik, amelyek a
RPATH
mechanizmusokon keresztül várják, hogy megtalálják őket, de egyes linkerek nem képesek teljes mértékben dekódolni ezeket az útvonalakat (pl. az olyan dolgok miatt, mint a$ORIGIN
).
.