Link een target aan gegeven bibliotheken.

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

Specifieer bibliotheken of vlaggen om te gebruiken bij het linken van een gegeven target. De naam <target> moet in de huidige directory zijn aangemaakt door een commando zoals add_executable() of add_library(). De overige argumenten specificeren bibliotheeknamen of vlaggen. Herhaalde aanroepen voor dezelfde <target> voegen items toe in de volgorde van aanroepen.

Als de naam van een bibliotheek overeenkomt met die van een ander doel in het project, wordt automatisch een afhankelijkheid toegevoegd in het bouwsysteem om er zeker van te zijn dat de bibliotheek die gelinkt wordt up-to-date is voordat het doel linkt. Itemnamen die beginnen met -, maar niet -l of -framework, worden behandeld als linker flags.

Een debug, optimized, of general sleutelwoord geeft aan dat de bibliotheek die er direct achteraan komt alleen gebruikt moet worden voor de corresponderende build configuratie. Het debug sleutelwoord komt overeen met de Debug configuratie (of met configuraties genoemd in de globale eigenschapDEBUG_CONFIGURATIONS als deze is ingesteld). Het sleutelwoordoptimized komt overeen met alle andere configuraties. Het sleutelwoordgeneral komt overeen met alle configuraties, en is puur optioneel (aangenomen indien weggelaten). Hogere granulariteit kan worden bereikt voor per-configuratie regels door het maken van en linken naarIMPORTED bibliotheek targets.

Bibliotheek afhankelijkheden zijn standaard transitief met deze signatuur.Wanneer dit target wordt gelinkt naar een ander target dan zullen de bibliotheken gelinkt aan dit target ook verschijnen op de link regel voor het andere target. Deze transitieve “link interface” is opgeslagen in deINTERFACE_LINK_LIBRARIES target eigenschap en kan worden opgeheven door de eigenschap direct in te stellen. Wanneer CMP0022 niet ingesteld is opNEW, is transitief linken ingebouwd maar kan overschreven worden door deLINK_INTERFACE_LIBRARIES eigenschap. Aanroepen van andere handtekeningen van dit commando kunnen de eigenschap instellen waardoor alle bibliotheken die exclusief door deze handtekening zijn gekoppeld privé worden.

CMake zal ook gebruiksvereisten van gekoppelde bibliotheekdoelen propageren. Gebruiksvereisten van afhankelijkheden beïnvloeden de compilatie van bronnen in de <target>.

Als een <item> een bibliotheek is in een Mac OX framework, zal de Headersdirectory van het framework ook worden verwerkt als ausageis. Dit heeft hetzelfde effect als het doorgeven van de framework directory als een include directory.

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

De PUBLIC, PRIVATE en INTERFACE sleutelwoorden kunnen worden gebruikt om zowel de link afhankelijkheden als de link interface in een commando aan te geven.Bibliotheken en targets die volgen op PUBLIC worden gelinkt, en maken deel uit van de link interface. Bibliotheken en targets die volgen op PRIVATE worden gelinkt, maar maken geen deel uit van de koppelingsinterface. Bibliotheken die volgen op INTERFACE worden toegevoegd aan de koppelingsinterface en worden niet gebruikt voor het koppelen <target>.

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

De LINK_INTERFACE_LIBRARIES-modus voegt de bibliotheken toe aan deINTERFACE_LINK_LIBRARIES-doel-eigenschap in plaats van ze te gebruiken voor het koppelen. Als beleid CMP0022 niet NEW is, dan voegt deze modus ook bibliotheken toe aan de LINK_INTERFACE_LIBRARIES en zijn per-configuratie equivalent.

Deze handtekening is alleen voor compatibiliteit. Geef de voorkeur aan de INTERFACE mode.

Bibliotheken gespecificeerd als debug zijn verpakt in een generator expressie om te corresponderen met debug builds. Als beleid CMP0022 niet NEW is, worden de bibliotheken ook toegevoegd aan de eigenschap LINK_INTERFACE_LIBRARIES_DEBUG (of aan de eigenschappen die overeenkomen met configuraties vermeld in de globale eigenschap DEBUG_CONFIGURATIONS als deze is ingesteld).Bibliotheken gespecificeerd als optimized worden toegevoegd aan de eigenschapINTERFACE_LINK_LIBRARIES. Als beleid CMP0022 niet NEW is, worden ze ook toegevoegd aan de eigenschapLINK_INTERFACE_LIBRARIES. Bibliotheken gespecificeerd alsgeneral (of zonder enig sleutelwoord) worden behandeld alsof ze zijn gespecificeerd voor zoweldebug als optimized.

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

De modi LINK_PUBLIC en LINK_PRIVATE kunnen worden gebruikt om zowel de link afhankelijkheden als de link interface in één commando op te geven.

Deze signatuur is alleen voor compatibiliteit. Geef de voorkeur aan de PUBLIC ofPRIVATE sleutelwoorden.

Bibliotheken en targets die volgen op LINK_PUBLIC worden gelinkt, en worden onderdeel gemaakt van de INTERFACE_LINK_LIBRARIES. Als policyCMP0022 niet NEW is, worden ze ook onderdeel van deLINK_INTERFACE_LIBRARIES. Bibliotheken en targets die volgen opLINK_PRIVATE worden gelinkt, maar worden geen onderdeel van deINTERFACE_LINK_LIBRARIES (of LINK_INTERFACE_LIBRARIES).

De library dependency graph is normaal gesproken acyclisch (een DAG), maar in het geval van wederzijds afhankelijke STATIC bibliotheken staat CMake toe dat de graph cycli bevat (sterk verbonden componenten). Wanneer een ander doel koppelt aan een van de bibliotheken, herhaalt CMake de gehele gekoppelde component. Bijvoorbeeld, de code

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)

koppelt main aan A B A B. Hoewel één herhaling meestal voldoende is, kunnen pathologische object-bestands- en symbool-schikkingen meer vereisen. Men kan dergelijke gevallen behandelen door handmatig de component te herhalen in de laatste target_link_libraries aanroep. Echter, als twee archieven echt zo van elkaar afhankelijk zijn, moeten ze waarschijnlijk worden gecombineerd in een enkel archief.

Argumenten voor target_link_libraries mogen “generator expressions “gebruiken met de syntax $<...>. Merk echter op dat generator expressies niet zullen worden gebruikt in OLD behandeling van CMP0003 of CMP0004.Zie de cmake-generator-expressions(7) handleiding voor beschikbare expressies. Zie de cmake-buildsystem(7) handleiding voor meer informatie over het definiëren van buildsystem properties.