Länka ett mål till givna bibliotek.

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

Specificera bibliotek eller flaggor som ska användas vid länkning av ett givet mål. Thenamed <target> måste ha skapats i den aktuella katalogen genom ettkommando som add_executable() eller add_library(). De följande argumenten anger biblioteksnamn eller flaggor. Upprepade anrop för samma <target> lägger till objekt i den ordning som anropas.

Om ett biblioteksnamn matchar namnet på ett annat mål i projektet kommer ett beroende automatiskt att läggas till i byggsystemet för att se till att biblioteket som länkas är uppdaterat innan målet länkas. Objektnamn som börjar med -, men inte -l eller -framework, behandlas som länkflaggor.

Ett debug, optimized eller general nyckelord indikerar att biblioteket som följer omedelbart efter det endast ska användas för den motsvarande byggkonfigurationen. Nyckelordet debug motsvarar Debug-konfigurationen (eller de konfigurationer som namnges i den globala egenskapen DEBUG_CONFIGURATIONS om den är inställd). Nyckelordetoptimized motsvarar alla andra konfigurationer. Nyckelordetgeneral motsvarar alla konfigurationer och är helt frivilligt (antas om det utelämnas). Högre granularitet kan uppnås för regler per konfiguration genom att skapa och länka tillIMPORTED-biblioteksmål.

Biblioteksberoenden är transitiva som standard med den här signaturen.När det här målet länkas till ett annat mål kommer de bibliotek som är länkade till det här målet också att visas på länkraden för det andra målet. Detta transitiva ”länkgränssnitt” lagras i egenskapenINTERFACE_LINK_LIBRARIES target och kan åsidosättas genom att ställa in egenskapen direkt. När CMP0022 inte är satt tillNEW är transitiv länkning inbyggd men kan åsidosättas av egenskapenLINK_INTERFACE_LIBRARIES. Anrop till andra signaturer av detta kommando kan ställa in egenskapen som gör att alla bibliotek som länkas exklusivt av denna signatur blir privata.

CMake kommer också att propagera användningskrav från länkade biblioteksmål. Användningskrav för beroenden påverkarkompilering av källor i <target>.

Om ett <item> är ett bibliotek i ett Mac OX-ramverk kommer Headersförteckningen i ramverket också att behandlas som ett användningskrav. Detta har samma effekt som att lämna över ramkatalogen som en include-katalog.

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

Nyckelorden PUBLIC, PRIVATE och INTERFACE kan användas för att specificera både länkberoenden och länkgränssnittet i ett och samma kommando.Bibliotek och mål som följer på PUBLIC länkas till och blir en del av länkgränssnittet. Bibliotek och mål som följer PRIVATE länkas till, men ingår inte i länkgränssnittet. Bibliotek som följer INTERFACE läggs till länkgränssnittet och används inte för att länka <target>.

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

Läget LINK_INTERFACE_LIBRARIES lägger biblioteken till INTERFACE_LINK_LIBRARIES-målegenskapen i stället för att använda dem för länkning. Om policy CMP0022 inte är NEW, lägger detta läge också till biblioteken till LINK_INTERFACE_LIBRARIES och desssper-konfiguration motsvarande.

Denna signatur är endast för kompatibilitet. Använd hellre läget INTERFACE i stället.

Bibliotek som anges som debug är omslutna av ett generatoruttryck för att motsvara felsökningsbyggen. Om policy CMP0022 inte är NEW läggs biblioteken också till egenskapen LINK_INTERFACE_LIBRARIES_DEBUG (eller till de egenskaper som motsvarar de konfigurationer som anges i den globala egenskapen DEBUG_CONFIGURATIONS om den är inställd).Bibliotek som anges som optimized läggs till egenskapen INTERFACE_LINK_LIBRARIES. Om policy CMP0022 inte är NEW läggs de också till i egenskapenLINK_INTERFACE_LIBRARIES. Bibliotek som anges somgeneral (eller utan nyckelord) behandlas som om de angetts för bådedebug och optimized.

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

Lägena LINK_PUBLIC och LINK_PRIVATE kan användas för att specificera både länkberoenden och länkgränssnittet i ett och samma kommando.

Den här signaturen är endast för kompatibilitet. Använd hellre nyckelorden PUBLIC ellerPRIVATE i stället.

Bibliotek och mål som följer LINK_PUBLIC länkas till och är en del av INTERFACE_LINK_LIBRARIES. Om policyCMP0022 inte är NEW, blir de också en del avLINK_INTERFACE_LIBRARIES. Bibliotek och mål som följer LINK_PRIVATE länkas till, men görs inte till en del av INTERFACE_LINK_LIBRARIES (eller LINK_INTERFACE_LIBRARIES).

Biblioteksberoendegrafen är normalt acyklisk (en DAG), men när det gäller ömsesidigt beroende STATIC-bibliotek tillåter CMake att grafen innehåller cykler (starkt sammankopplade komponenter). När ett annat mål länkar till ett av biblioteken upprepar CMake hela den anslutna komponenten, till exempel koden

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)

länkar main till A B A B. Det räcker vanligtvis med en upprepning, men patologiska objektfiler och symbolarrangemang kan kräva fler upprepningar. Man kan hantera sådana fall genom att manuellt upprepa komponenten i det sista target_link_libraries-anropet. Om två arkiv verkligen är så beroende av varandra bör de dock troligen kombineras till ett enda arkiv.

Argument till target_link_libraries kan använda ”generatoruttryck” med syntaxen $<...>. Observera dock att generatoruttryck inte kommer att användas vid OLD-hantering av CMP0003 eller CMP0004.Se cmake-generator-expressions(7) manualen för tillgängligauttryck. Se cmake-buildsystem(7) manualen för mer information om hur man definierar byggsystemets egenskaper.