Odkazuje cíl na dané knihovny.

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

Určí knihovny nebo příznaky, které se mají použít při linkování daného cíle. Thenamed <target> musí být v aktuálním adresáři vytvořen příkazem jako add_executable() nebo add_library(). Další argumenty určují názvy knihoven nebo příznaky. Opakovaná volání téhož příkazu <target> doplňují položky v pořadí, v jakém byly volány.

Pokud se název knihovny shoduje s názvem jiného cíle v projektu, bude v systému sestavování automaticky přidána závislost, aby bylo zajištěno, že linkovaná knihovna je aktuální před tím, než se cíl nalinkuje. Názvy položekzačínající -, ale ne -l nebo -framework, jsou považovány za příznaky linkování.

Klíčové slovo debug, optimized nebo general označuje, že knihovna, která za ním bezprostředně následuje, má být použita pouze pro odpovídající konfiguraci sestavení. Klíčové slovo debug odpovídá konfiguraci Debug (nebo konfiguracím pojmenovaným v globální vlastnostiDEBUG_CONFIGURATIONS, pokud je nastavena). Klíčové slovooptimized odpovídá všem ostatním konfiguracím. Klíčové slovogeneral odpovídá všem konfiguracím a je čistě volitelné (předpokládá se, pokud je vynecháno). Vyšší granularity lze u pravidel pro jednotlivé konfigurace dosáhnout vytvořením a linkováním naIMPORTED cíle knihoven.

Závislosti knihoven jsou ve výchozím nastavení s touto signaturou tranzitivní. když je tento cíl linkován do jiného cíle, pak se knihovny navázané na tento cíl objeví na linkovacím řádku i pro druhý cíl. Toto tranzitivní „linkové rozhraní“ je uloženo ve vlastnostiINTERFACE_LINK_LIBRARIES target a může být přepsáno přímým nastavením této vlastnosti. Pokud CMP0022 není nastaveno naNEW, je tranzitivní linkování zabudováno, ale může být přepsáno vlastnostíLINK_INTERFACE_LIBRARIES. Volání jiných signatur tohoto příkazu může nastavit vlastnost, která činí všechny knihovny linkovanévýhradně touto signaturou soukromými.

CMake bude také propagovat požadavky na použitíz cílů linkovaných knihoven. Požadavky na použití závislostí ovlivňujíkompilaci zdrojů v <target>.

Pokud je <item> knihovna ve frameworku Mac OX, bude Headersadresář frameworku také zpracován jako požadavek na použití. To má stejnýúčinek jako předání adresáře frameworku jako adresáře include.

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

Klíčová slova PUBLIC, PRIVATE a INTERFACE mohou být použita pro určení závislostí odkazu i rozhraní odkazu v jednom příkazu. knihovny a cíle následující za PUBLIC jsou odkazovány a jsou součástí rozhraní odkazu. Knihovny a cíle následující za PRIVATEse linkují, ale nejsou součástí linkového rozhraní. Knihovnynásledující za INTERFACE jsou připojeny k linkovacímu rozhraní a nejsou použity pro linkování <target>.

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

Režim LINK_INTERFACE_LIBRARIESpřipojí knihovny k vlastnostiINTERFACE_LINK_LIBRARIES target, místo aby je použil pro linkování. Pokud zásada CMP0022 není NEW, pak tento režimpřipojí knihovny také k LINK_INTERFACE_LIBRARIES a jehokonfiguračnímu ekvivalentu.

Tento podpis je pouze pro kompatibilitu. Místo toho upřednostněte režim INTERFACE.

Knihovny uvedené jako debug jsou zabaleny do výrazu generátoru, který odpovídá ladícím sestavám. Pokud zásada CMP0022 není NEW, jsou knihovny připojeny také k vlastnostiLINK_INTERFACE_LIBRARIES_DEBUG (nebo k vlastnostem odpovídajícím konfiguracím uvedeným v globální vlastnosti DEBUG_CONFIGURATIONS, pokud je nastavena). knihovny zadané jako optimized jsou připojeny k vlastnostiINTERFACE_LINK_LIBRARIES. Pokud zásada CMP0022 není NEW, jsou rovněž připojeny k vlastnostiLINK_INTERFACE_LIBRARIES. S knihovnami zadanými jakogeneral (nebo bez jakéhokoli klíčového slova) se zachází, jako by byly zadány jak prodebug, tak pro optimized.

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

Možnosti LINK_PUBLIC a LINK_PRIVATE lze použít k zadání jak závislostí odkazu, tak rozhraní odkazu v jednom příkazu.

Tento podpis je pouze pro kompatibilitu. Místo toho upřednostněte klíčová slova PUBLIC neboPRIVATE.

Knihovny a cíle následující po LINK_PUBLIC jsou linkovány a jsou součástí INTERFACE_LINK_LIBRARIES. Pokud politikaCMP0022 není NEW, jsou rovněž učiněny součástíLINK_INTERFACE_LIBRARIES. Knihovny a cíle následující poLINK_PRIVATE jsou spojeny, ale nejsou učiněny součástíINTERFACE_LINK_LIBRARIES (nebo LINK_INTERFACE_LIBRARIES).

Graf závislostí knihoven je normálně acyklický (DAG), ale v případě vzájemně závislých knihoven STATIC umožňuje CMake, aby graf obsahoval cykly (silně spojené komponenty). Když se k jedné z knihoven připojí další cíl, CMake zopakuje celou propojenou komponentu, například kód

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)

propojí main s A B A B. Zatímco jedno opakování obvyklestačí, patologické uspořádání objektových souborů a symbolů může vyžadovatvíce. Takové případy lze řešit ručním opakováním komponenty vposledním volání target_link_libraries. Pokud jsou však dva archivy skutečně tak vzájemně závislé, měly by být pravděpodobně spojeny do jednoho archivu.

Argumenty pro target_link_libraries mohou používat „generátorové výrazy „se syntaxí $<...>. Všimněte si však, že generátorové výrazy nebudou použity při zpracování OLD CMP0003 nebo CMP0004. dostupné výrazy najdete v příručce cmake-generator-expressions(7). Více informací o definování vlastností buildsystému naleznete v příručce cmake-buildsystem(7).

.