Nytt i version 3.13.
Lägg till länkkataloger till ett mål.
target_link_directories(<target> <INTERFACE|PUBLIC|PRIVATE> ...])
Specificerar sökvägarna i vilka länkaren ska söka efter bibliotek när den länkar ett givet mål. Varje post kan vara en absolut eller relativ sökväg, där den senare tolkas som relativ till den aktuella källkatalogen. Dessa objekt kommer att läggas till i länkningskommandot.
Det namngivna <target>
måste ha skapats av ett kommando somadd_executable()
eller add_library()
och får inte vara ettALIAS-mål.
Nyckelorden INTERFACE
, PUBLIC
och PRIVATE
krävs för att specificera räckvidden för de objekt som följer efter dem. PRIVATE
och PUBLIC
poster kommer att fylla LINK_DIRECTORIES
egenskapen i <target>
. PUBLIC
och INTERFACE
poster kommer att fylla INTERFACE_LINK_DIRECTORIES
egenskapen för <target>
(IMPORTED mål har endast stöd för INTERFACE
poster).Varje post specificerar en länkkatalog och kommer vid behov att konverteras till en absolut sökväg innan den läggs till den relevanta egenskapen. Upprepade anrop för samma <target>
lägger till objekt i den ordning som anropas.
Om BEFORE
specificeras kommer innehållet att läggas till den relevanta egenskapen i stället för att läggas till.
Argument till target_link_directories
kan använda “generatoruttryck” med syntaxen $<...>
. Se cmake-generator-expressions(7)
handboken för tillgängliga uttryck. Se cmake-buildsystem(7)
manualen för mer information om hur man definierar buildsystemegenskaper.
Note
Detta kommando är sällan nödvändigt och bör undvikas när det finns andra valmöjligheter. Föredra att lämna fullständiga absoluta sökvägar till bibliotek när det är möjligt, eftersom detta säkerställer att rätt bibliotek alltid länkas.Kommandot find_library()
ger den fullständiga sökvägen, som i allmänhet kan användas direkt i anrop till target_link_libraries()
.Situationer där en sökväg till ett bibliotek kan behövas är bland annat:
-
Projektsgeneratorer som Xcode där användaren kan byta målarkitektur vid byggnadstillfället, men där en fullständig sökväg till ett bibliotek inte kan användas eftersom det bara tillhandahåller en arkitektur (dvs.Det är inte en universell binärfil).
-
Bibliotek kan själva ha andra privata biblioteksberoenden som förväntas hittas via
RPATH
-mekanismer, men vissa länkare kan inte avkoda dessa sökvägar fullt ut (t.ex. på grund av att det finns saker som$ORIGIN
).