Egy célprogram összekapcsolása adott könyvtárakkal.

target_link_libraries(<target> ]] <item>] ...)

Meghatározza az adott célprogram összekapcsolásakor használandó könyvtárakat vagy zászlókat. A <target> nevet az aktuális könyvtárban egy olyan parancsnak kell létrehoznia, mint a add_executable() vagy a add_library(). A további argumentumok könyvtárneveket vagy zászlókat adnak meg. Ugyanannak a <target>-nek az ismételt hívása a hívás sorrendjében csatolja az elemeket.

Ha egy könyvtár neve megegyezik a projekt egy másik célpontjának nevével, akkor a build rendszer automatikusan hozzáadja a függőséget, hogy a linkelt könyvtár naprakész legyen, mielőtt a célpontot linkelné. A --vel kezdődő elemnevek, de a -l vagy -framework nem, linker flagként kezelendők.

A debug, optimized vagy general kulcsszó azt jelzi, hogy az azt közvetlenül követő könyvtárat csak a megfelelő építési konfigurációhoz kell használni. A debug kulcsszó megfelel a Debug konfigurációnak (vagy aDEBUG_CONFIGURATIONS globális tulajdonságban megnevezett konfigurációknak, ha az be van állítva). Aoptimized kulcsszó az összes többi konfigurációnak felel meg. Ageneral kulcsszó minden konfigurációnak megfelel, és tisztán opcionális (elhagyása esetén feltételezett). Nagyobb granularitás érhető el a konfigurációnkénti szabályoknál azIMPORTED könyvtárcélpontok létrehozásával és linkelésével.

A könyvtárfüggőségek alapértelmezés szerint tranzitívak ezzel az aláírással.Amikor ez a célpont egy másik célpontba van linkelve, akkor az ehhez a célponthoz linkelt könyvtárak megjelennek a másik célpont linksorában is. Ez a tranzitív “link interfész” aINTERFACE_LINK_LIBRARIES target tulajdonságban van tárolva, és felülbírálható a tulajdonság közvetlen beállításával. Ha a CMP0022 nem azNEW értékre van beállítva, a tranzitív linkelés be van építve, de aLINK_INTERFACE_LIBRARIES tulajdonsággal felülbírálható. A parancs más szignatúráinak hívásai beállíthatják a tulajdonságot, ami a kizárólag ezzel a szignatúrával linkelt könyvtárakat priváttá teszi.

A

CMake a linkelt könyvtárcélokból származó használati követelményeket is továbbítja. A függőségek használati követelményei hatással vannak a<target>forrásainak fordítására.

Ha egy <item>könyvtár egy Mac OX keretrendszerben van, a keretrendszer Headerskönyvtárát is feldolgozza, mint használati követelményt. Ennek ugyanaz a hatása, mint a keretrendszer könyvtárának include könyvtárként való átadásának.

target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <lib> ... ...])

A PUBLIC, PRIVATE és INTERFACE kulcsszavakkal egy parancsban megadhatók a linkfüggőségek és a linkfelület is.A PUBLIC után következő könyvtárak és célprogramok linkelésre kerülnek, és a linkfelület részévé válnak. A PRIVATE után következő könyvtárakat és célpontokat linkelik, de nem válnak a link interfész részévé. A INTERFACE után következő könyvtárakat a linkelési felülethez csatolják, és nem használják fel a <target> linkeléshez.

target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <lib>] ...)

A LINK_INTERFACE_LIBRARIES mód a könyvtárakat aINTERFACE_LINK_LIBRARIES céltulajdonsághoz csatolja ahelyett, hogy felhasználná őket a linkeléshez. Ha a CMP0022 házirend nem NEW, akkor ez a módszintén hozzárendeli a könyvtárakat a LINK_INTERFACE_LIBRARIES és annakper-konfigurációs megfelelőjéhez.

Ez az aláírás csak kompatibilitási célokat szolgál. Helyette inkább a INTERFACE módot részesítse előnyben.

A debug-ként megadott könyvtárakat egy generátor kifejezésbe csomagolja, hogy megfeleljen a debug build-eknek. Ha a policy CMP0022 nem NEW, a könyvtárak aLINK_INTERFACE_LIBRARIES_DEBUGtulajdonsághoz (vagy a DEBUG_CONFIGURATIONS globális tulajdonságban felsorolt konfigurációknak megfelelő tulajdonságokhoz, ha az be van állítva) is hozzá lesznek csatolva.A optimizedként megadott könyvtárak aINTERFACE_LINK_LIBRARIES tulajdonsághoz lesznek csatolva. Ha a CMP0022 házirend nem NEW, akkor ezek is aLINK_INTERFACE_LIBRARIES tulajdonsághoz csatolódnak. Ageneral-ként (vagy kulcsszó nélkül) megadott könyvtárakat úgy kezeli, mintha mind adebug, mind a optimized esetében megadta volna.

target_link_libraries(<target> <LINK_PRIVATE|LINK_PUBLIC> <lib>] ... <lib>] ...])

A LINK_PUBLIC és LINK_PRIVATE módok egy parancsban megadhatják mind a linkfüggőségeket, mind a link interfészt.

Az aláírás csak kompatibilitási célokat szolgál. Helyette inkább a PUBLIC vagyPRIVATE kulcsszavakat használja.

A LINK_PUBLIC után következő könyvtárak és célpontok linkelve vannak, és a INTERFACE_LINK_LIBRARIES részévé válnak. Ha a policyCMP0022 nem NEW, akkor ezek is aLINK_INTERFACE_LIBRARIES részévé válnak. ALINK_PRIVATE utáni könyvtárak és célpontok kapcsolódnak, de nem válnak aINTERFACE_LINK_LIBRARIES (vagy LINK_INTERFACE_LIBRARIES) részévé.

A könyvtárfüggőségi gráf általában aciklikus (DAG), de az egymástól függő STATIC könyvtárak esetében a CMake lehetővé teszi, hogy a gráf tartalmazzon ciklusokat (erősen összefüggő komponenseket). Amikor egy másik célpont az egyik könyvtárhoz kapcsolódik, a CMake megismétli a teljes összefüggő komponenst.Például a

add_library(A STATIC a.c)add_library(B STATIC b.c)target_link_libraries(A B)target_link_libraries(B A)add_executable(main main.c)target_link_libraries(main A)

kód main a A B A B könyvtárhoz kapcsolódik. Míg egy ismétlés általában elégséges, a patológiás objektumfájlok és szimbólumelrendezések több ismétlést is igényelhetnek. Az ilyen eseteket úgy lehet kezelni, hogy az utolsó target_link_libraries hívásban manuálisan megismételjük a komponenst. Ha azonban két archívum valóban ennyire függ egymástól, akkor valószínűleg egyetlen archívumba kell őket egyesíteni.

A target_link_libraries-hez tartozó argumentumok használhatnak “generátor kifejezéseket” a $<...> szintaxissal. Megjegyzendő azonban, hogy a generátor kifejezések nem használhatók az OLD CMP0003 vagy CMP0004 kezelésében.A rendelkezésre álló kifejezéseket lásd a cmake-generator-expressions(7) kézikönyvben. Az építési rendszer tulajdonságainak meghatározásáról bővebben a cmake-buildsystem(7) kézikönyvben olvashat.