Linkitä kohde tiettyihin kirjastoihin.

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

Määritä kirjastot tai liput, joita käytetään linkitettäessä tiettyä kohdetta. Thenamed <target> on oltava luotu nykyiseen hakemistoon komennolla kuten add_executable() tai add_library(). Jäljellä olevat argumentit määrittävät kirjastojen nimet tai liput. Toistuvat kutsut samalle <target>:lle lisäävät kohteet kutsutusjärjestyksessä.

Jos kirjaston nimi vastaa projektin toisen kohteen nimeä, riippuvuus lisätään automaattisesti build-järjestelmään, jotta varmistetaan, että linkitettävä kirjasto on ajan tasalla ennen kohteen linkittämistä. Kohteiden nimiä, jotka alkavat -:llä, mutta eivät -l:llä tai -framework:llä, käsitellään linkityslippuina.

Avainsana debug, optimized tai general ilmaisee, että sitä välittömästi seuraavaa kirjastoa käytetään vain vastaavassa rakennuskonfiguraatiossa. Avainsana debug vastaa Debug-konfiguraatiota (tai globaalissa ominaisuudessaDEBUG_CONFIGURATIONS mainittuja konfiguraatioita, jos se on asetettu). Avainsanaoptimized vastaa kaikkia muita konfiguraatioita. Avainsanageneral vastaa kaikkia konfiguraatioita, ja se on puhtaasti valinnainen (oletetaan, jos se jätetään pois). Suurempi rakeisuus voidaan saavuttaa konfiguraatiokohtaisten sääntöjen osalta luomalla ja linkittämälläIMPORTED-kirjastokohteisiin.

Kirjastoriippuvuudet ovat oletusarvoisesti transitiivisia tällä allekirjoituksella.Kun tämä kohde linkitetään toiseen kohteeseen, kirjastot, jotka on linkitetty tähän kohteeseen, näkyvät myös toisen kohteen linkkirivillä. Tämä transitiivinen ”linkkirajapinta” on tallennettuINTERFACE_LINK_LIBRARIES target-ominaisuuteen ja se voidaan ohittaa asettamalla ominaisuus suoraan. Kun CMP0022 ei ole asetettuNEW:ksi, transitiivinen linkitys on sisäänrakennettu, mutta se voidaan ohittaaLINK_INTERFACE_LIBRARIES-ominaisuudella. Tämän komennon muiden allekirjoitusten kutsut voivat asettaa ominaisuuden, joka tekee kaikista kirjastoista, jotka on linkitetty yksinomaan tällä allekirjoituksella, yksityisiä.

CMake myös levittää käyttövaatimuksia linkitetyistä kirjastokohteista. Riippuvuuksien käyttövaatimukset vaikuttavat <target>lähteiden kääntämiseen.

Jos <item> on kirjasto Mac OX -kehyksessä, myös Headerskehyksen Headershakemisto käsitellään käyttövaatimuksena. Tällä on sama vaikutus kuin frame-hakemiston välittämisellä include-hakemistona.

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

Avainsanoja PUBLIC, PRIVATE ja INTERFACE voidaan käyttää sekä linkitysriippuvuuksien että linkitysrajapinnan määrittämiseen yhdellä komennolla.PUBLIC jälkeiset kirjastot ja kohteet linkitetään ja niistä tehdään osa linkitysrajapintaa. Kirjastot ja kohteet, jotka seuraavat PRIVATE, linkitetään, mutta niistä ei tehdä osaa linkitysrajapinnasta. INTERFACE jälkeiset kirjastot liitetään linkitysrajapintaan, eikä niitä käytetä linkittämiseen <target>.

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

Tilassa LINK_INTERFACE_LIBRARIES kirjastot liitetään INTERFACE_LINK_LIBRARIES-kohdeominaisuuteen sen sijaan, että niitä käytettäisiin linkittämiseen. Jos käytäntö CMP0022 ei ole NEW, tämä tila liittää kirjastot myös LINK_INTERFACE_LIBRARIES:een ja senper-konfiguraatiota vastaavaan.

Tämä allekirjoitus on vain yhteensopivuuden vuoksi. Suosi sen sijaan INTERFACE-moodia.

Kirjastot, jotka on määritetty muodossa debug, kääritään generaattorilausekkeeseen debug-rakentamista varten. Jos käytäntö CMP0022 ei ole NEW, kirjastot liitetään myös LINK_INTERFACE_LIBRARIES_DEBUGominaisuuteen (tai globaalissa DEBUG_CONFIGURATIONS-ominaisuudessa lueteltuja konfiguraatioita vastaaviin ominaisuuksiin, jos se on asetettu).optimized-merkinnällä määritetyt kirjastot liitetään INTERFACE_LINK_LIBRARIES-ominaisuuteen. Jos käytäntö CMP0022ei ole NEW, ne liitetään myösLINK_INTERFACE_LIBRARIES-ominaisuuteen. Kirjastoja, jotka on määritetty muodossageneral (tai ilman mitään avainsanaa), käsitellään ikään kuin ne olisi määritetty sekädebug:lle että optimized:lle.

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

Tiloja LINK_PUBLIC ja LINK_PRIVATE voidaan käyttää sekä linkkiriippuvuuksien että linkkiliitännän määrittämiseen yhdellä komennolla.

Tämä allekirjoitus on vain yhteensopivuuden vuoksi. Käytä sen sijaan mieluummin PUBLIC– tai PRIVATE-avainsanoja.

Kirjastot ja kohteet, jotka seuraavat LINK_PUBLIC-avainsanaa, linkitetään ja niistä tehdään osa INTERFACE_LINK_LIBRARIES-avainsanaa. Jos käytäntöCMP0022 ei ole NEW, niistä tehdään myös osaLINK_INTERFACE_LIBRARIES. Kirjastot ja kohteet, jotka seuraavatLINK_PRIVATE linkitetään, mutta niistä ei tehdä osaaINTERFACE_LINK_LIBRARIES:stä (tai LINK_INTERFACE_LIBRARIES:stä).

Kirjastojen riippuvuusgraafi on normaalisti asyklinen (DAG), mutta jos kyseessä ovat toisistaan riippuvaiset STATIC-kirjastot, CMake sallii, että graafi voi sisältää syklejä (vahvasti kytkeytyneitä osia). Kun toinen kohde linkittyy johonkin kirjastoon, CMake toistaa koko yhdistetyn komponentin. esimerkiksi koodi

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)

linkittää main kirjastoon A B A B. Yksi toisto riittää yleensä, mutta patologiset objektitiedosto- ja symbolijärjestelyt voivat vaatia useampia toistoja. Tällaiset tapaukset voidaan hoitaa toistamalla komponentti manuaalisesti viimeisessä target_link_libraries-kutsussa. Jos kuitenkin kaksi arkistoa ovat todella niin riippuvaisia toisistaan, ne pitäisi luultavasti yhdistää yhdeksi arkistoksi.

Argumentit target_link_librariesille voivat käyttää ”generaattorilausekkeita”, joiden syntaksi on $<...>. Huomaa kuitenkin, että generaattorilausekkeita ei käytetä CMP0003:n tai CMP0004:n OLD-käsittelyssä.Katso käytettävissä olevat lausekkeet cmake-generator-expressions(7)-käsikirjasta. Lisätietoja buildsystem-ominaisuuksien määrittelystä on cmake-buildsystem(7)-käsikirjassa.

.