Installing Targets¶
install(TARGETS targets... ] ] ] )
Formuläret TARGETS
specificerar regler för installation av mål från ett projekt. Det finns fem typer av målfiler som kan installeras: ARCHIVE
, LIBRARY
, RUNTIME
, FRAMEWORK
och BUNDLE
.Exekverbara filer behandlas som RUNTIME
-mål, förutom att de som är markerade med egenskapen MACOSX_BUNDLE
behandlas som BUNDLE
-mål på OS X. Statiska bibliotek behandlas som ARCHIVE
-mål, förutom att de som markerats med egenskapen FRAMEWORK
behandlas som FRAMEWORK
-mål på OS X. Modulbibliotek behandlas alltid som LIBRARY
-mål.För icke-DLL-plattformar behandlas delade bibliotek som LIBRARY
-mål, förutom att de som markerats med egenskapen FRAMEWORK
behandlas som FRAMEWORK
-mål på OS X. För DLL-plattformar behandlas DLL-delen av ett delat bibliotek som ett RUNTIME
-mål och motsvarande importbibliotek behandlas som ett ARCHIVE
-mål.Alla Windows-baserade system, inklusive Cygwin, är DLL-plattformar.Argumenten ARCHIVE
, LIBRARY
, RUNTIME
och FRAMEWORK
ändrar vilken typ av mål som de efterföljande egenskaperna gäller.Om inget anges gäller installationsegenskaperna för alla måltyper. Om endast ett anges kommer endast mål av den typen att installeras (vilket kan användas för att installera endast en DLL eller endast ett importbibliotek).
Argumenten PRIVATE_HEADER
, PUBLIC_HEADER
och RESOURCE
gör att efterföljande egenskaper tillämpas vid installation av ett FRAMEWORK
delat biblioteksmåls associerade filer på icke-Apple-plattformar. Regler som definieras av dessa argument ignoreras på Apple-plattformar eftersom de associerade filerna installeras på lämpliga platser i rammappen. Se dokumentationen förPRIVATE_HEADER
, PUBLIC_HEADER
ochRESOURCE
målegenskaperna för mer information.
Endera NAMELINK_ONLY
eller NAMELINK_SKIP
kan anges som ettLIBRARY
alternativ. På vissa plattformar har ett versionerat delat bibliotek en symbolisk länk som:
lib<name>.so -> lib<name>.so.1
där lib<name>.so.1
är bibliotekets soname och lib<name>.so
är en ”namelink” som gör det möjligt för länkarna att hitta biblioteket när de får-l<name>
. Alternativet NAMELINK_ONLY
orsakar installation av endast thenamelink när ett biblioteksmål installeras. Alternativet NAMELINK_SKIP
orsakar installation av andra biblioteksfiler än namelink när ett biblioteksmål installeras. När inget av alternativen anges installeras båda delarna. På plattformar där versionerade delade bibliotek inte har namelinks eller när ett bibliotek inte är versionerat installerar NAMELINK_SKIP
-alternativet biblioteket och NAMELINK_ONLY
-alternativet installerar ingenting. Se VERSION
ochSOVERSION
target-egenskaperna för mer information om hur man skapar versionerade delade bibliotek.
Den INCLUDES DESTINATION
specificerar en lista med kataloger som kommer att läggas till INTERFACE_INCLUDE_DIRECTORIES
target-egenskapen för <targets>
när den exporteras med kommandotinstall(EXPORT)
. Om en relativ sökväg anges behandlas den som relativ till $<INSTALL_PREFIX>
.Detta är oberoende av resten av argumentgrupperna och installerar faktiskt ingenting.
En eller flera grupper av egenskaper kan specificeras i ett enda anrop till TARGETS
-formen av detta kommando. Ett mål kan installeras mer än en gång på olika platser. Tänk på de hypotetiska målen myExe
,mySharedLib
och myStaticLib
. Koden:
install(TARGETS myExe mySharedLib myStaticLib RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib/static)install(TARGETS mySharedLib DESTINATION /some/full/path)
kommer att installera myExe
till <prefix>/bin
och myStaticLib
till<prefix>/lib/static
. På icke-DLL-plattformar installeras mySharedLib
till <prefix>/lib
och /some/full/path
. På DLL-plattformar installeras mySharedLib
DLL på <prefix>/bin
och /some/full/path
och dess importbibliotek installeras på <prefix>/lib/static
och /some/full/path
.
Valet EXPORT
associerar de installerade målfilerna med en export kallad <export-name>
. Det måste förekomma före alla alternativ RUNTIME
,LIBRARY
eller ARCHIVE
. För att faktiskt installera själva exportfilen, anropar du install(EXPORT)
, dokumenterat nedan.
Installation av ett mål med egenskapen EXCLUDE_FROM_ALL
target som är satt till TRUE
har odefinierat beteende.
Den installationsdestination som ges till målinstallationen DESTINATION
kan använda ”generatoruttryck” med syntaxen $<...>
. Se cmake-generator-expressions(7)
manualen för tillgängliga uttryck.