CMake

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 12 oktober 2020; kontroller kräver 54 redigeringar .
CMake
Sorts Bygg automation , gratis och öppen källkodsprogram och verktyg
Författare Kitware Inc. [d]
Utvecklaren Kitware Inc. [d] , Alexander Neundorf [d] , Ken Martin [d] , Andrey Sedilnik [d] , William Hoffman [d] och Brad King [d]
Skrivet i C++ och C [2]
Gränssnitt Qt [3] [4] [5]
Operativ system Unix-liknande operativsystem [6] och Microsoft Windows [6]
Gränssnittsspråk engelsk
Första upplagan 2000
Hårdvaruplattform plattformsoberoende [7]
senaste versionen
stat aktiva
Licens modifierad BSD-licens [d] [8][9][10]
Hemsida cmake.org
 Mediafiler på Wikimedia Commons

CMake ( MFA [ ˈ s i ː m e ɪ k ]; från engelska.  C ross-platform Make - " Cross- platform Make " [11] ) är ett plattformsoberoende verktyg som har förmågan att automatisera sammansättningen av programvara från källkod . CMake själv bygger inte direkt, utan genererar bara byggfiler från en förskriven skriptfil " CMakeLists.txt " och ger ett enkelt, enhetligt hanteringsgränssnitt. Dessutom kan CMake automatisera processen för installation och förpackning .

Det anses vara ett alternativ till det Perl- och M4 -baserade Autotools- systemet som är vanligt i GNU -gemenskapen , vilket kräver vissa färdigheter för praktisk användning, och befintliga versioner är i vissa fall inkompatibla med varandra.

Jämfört med Autotools-alternativet som introducerades 2008, är de Python - baserade SCons snabbare eftersom det är skrivet i C och använder ett extremt enkelt makrospråk , men SCons är mycket utbyggbart.

Historik

Utvecklingen av CMake började 1999 som svar på ett behov av ett plattformsoberoende byggsystem för ITK [12] . Ett projekt finansierat av US National Library of Medicine som en del av " Visible Human Project ". Utvecklingsuppdraget anförtroddes till ett litet företag som heter Kitware . Det var influerat av ett tidigare system kallat "pcmaker" skapat av Ken Martin och andra för att stödja Visualization Toolkit (VTK) [13] .

På den tiden var det vanligt att använda konfigurationsskript och skapa filer för att bygga programvaruprojekt på Unix-plattformar och Visual Studio- projektfiler på Windows . Detta förhållningssätt till utveckling medförde stora besvär, eftersom att till exempel lägga till en vanlig källkodsfil i ett projekt ledde till stora svårigheter, eftersom det måste göras separat för varje plattform och på helt olika sätt. Uppenbarligen ville utvecklarna ha ett enda enhetligt byggsystem som inte var tidskrävande och som hade alla fördelar med befintliga byggsystem, men utan deras nackdelar [14] [15] .

Funktioner

Nyckelfunktionen är möjligheten att (valfritt) placera kompilatorns utdata (som objektfiler) utanför källträdet . Detta tillåter flera varianter av builds från samma källkod, såväl som korskompilering . Detta tillvägagångssätt att separera käll- och byggfiler säkerställer att borttagning av byggkatalogen inte tar bort källkoden. Användarna själva är dock inte skyddade från oavsiktlig radering av källkatalogen [16] .

Anpassad projektstruktur

CMake kan hitta systemomfattande och användarkataloger för körbara filer, konfigurationsfiler och bibliotek. Dessa platser lagras i en cache som kan konfigureras innan målbyggefilerna genereras. CMake-cachen kan redigeras med den grafiska editorn som följer med CMake, eller manuellt genom kommandoradsskalet med CMake-kommandon.

Komplexa projektkataloghierarkier designade för olika konfigurationer, byggnad med olika bibliotek och verktyg stöds också väl av CMake. I huvudsak ger CMake möjligheten att skapa delprojekt som byggs innan huvudprojektet byggs, vilket gör att du kan skapa beroendekedjor som är byggda i rätt ordning som utvecklaren behöver.

Stöd för olika utvecklingsmiljöer

CMake kan generera projektfiler för flera populära IDE:er som Microsoft Visual Studio , Xcode och Eclipse CDT .

Det kan också skapa byggskript för:

För att förenkla introduktionen av CMake-stöd i nya IDE:er rekommenderas att använda de förinställda filerna " CMakePresets.json " [17] , för mer bekväm konfiguration av byggprocessen, samt " File API " [18] , som innehåller all information som behövs för IDE.

Följande IDE:er stöder CMake inbyggt [19] :

Kompilatorstöd

CMake låter dig definiera egenskaper som kompilatorn måste stödja för att kompilera målprogrammet eller biblioteket [20] .

CMake har en omfattande lista över kompilatorer [21] som inkluderar:

Monteringsprocess

Att bygga ett program eller bibliotek med CMake är en process i två steg. Först skapas (genereras) standardfiler från konfigurationsfiler ( CMakeLists.txt ), som är skrivna på CMake-språket. Sedan används systembyggverktygen (Make, Ninja, etc.) för att faktiskt bygga program [16] [22] .

Byggfilerna konfigureras beroende på vilken generator som används (till exempel är "Unix Makefiles"-generatorn för Makefiles). Avancerade användare kan skapa och inkludera sina egna Make-filgeneratorer för att stödja nya kompilatorer och operativsystem. De genererade filerna placeras vanligtvis (med en CMake-flagga) i en extern katalog, utanför källfilerna, till exempel i katalogen " bygg ".

Varje projekt efter byggnad, i underkataloger innehåller " CMakeCache.txt " och en katalog med Make-filer, vilket hjälper till att undvika eller påskynda "regenereringssteget", efter omstart av bygget [23] .

Bygg måltyper

Beroende på konfigurationen av CMakeLists.txt och det valda målet, kan byggfiler skapa:

CMake kan skapa objektfiler som kan länkas till körbara binärer/bibliotek genom att undvika dynamisk (runtime) länkning och använda statisk (kompileringstid) länkning istället. Detta ger flexibilitet vid inställning av olika optimeringar (byggberoenden kan bestämmas automatiskt) [24] .

Förkompilerade rubrikfiler

Sedan CMake 3.6 kan du skapa förkompilerade header-filer [25] .

Språk

CMake har ett relativt enkelt , tolkat imperativt skriptspråk . Den stöder variabler , metoder för strängmanipulering , arrayer , funktions- och makrodeklarationer , modulinkludering (import). CMake språkkommandon (eller direktiv) läses av CMake från filen CMakeLists.txt . Den här filen anger källfilerna och byggalternativen som CMake placerar i projektets byggspecifikation (till exempel i en Make-fil). Dessutom kan filer med prefixet .cmake innehålla skript som används av CMake [26] .

Kommandosyntax

Kommandoargument separeras med mellanslag och kan innehålla nyckelord för att separera grupper av argument. Till exempel i kommandot

# Installera kommandot install ( TARGETS ... # TARGETS CONFIGURATIONS ... # CONFIGURATIONS (Debug, Release...) RUNTIME DESTINATION ... ) # (Executable, MACOSX_BUNDLE, DLL) DESTINATION

nyckelorden är TARGETS, CONFIGURATIONSoch RUNTIME DESTINATION. I det här fallet fungerar TARGETSde som separatorer mellan "mål" och "konfigurationer" [27] . CONFIGURATIONS

Exempel på CMake-kommandon som definierar mål och deras beroenden [28] [29] [30] :

  • add_executable(...)- definierar målet (den körbara filen, till exempel .exe , beror på målplattformen);
  • add_library(...)- definierar målet (bibliotek, till exempel .so eller .dll );
  • target_link_libraries(...)— bestämmer beroenden för det specificerade målet.

JSON-stöd

CMake stöder extrahering av datavärden till variabler från JSON- strängar (sedan version 3.19) [31] .

Moduler och verktyg

CMake kommer med många " .cmake "-moduler och verktyg. De gör det enkelt att göra saker som att leta upp beroenden (både inbyggda och externa, som FindXYZ- moduler), verktyg för att testa körbara filer, paketera ( CPack- modulen och cpack- kommandot ) och hantera beroenden från externa projekt ( ExternalProject modul ) [32] [ 33] :

  • ctest - används för att testa målen specificerade i CMakeLists.txt ;
  • ccmake och cmake-gui - ställer in och uppdaterar konfigurationsvariabler avsedda för målbyggsystemet;
  • cpack - Hjälper till att paketera och installera programvara.

CPack

Från och med version 2.4.2 [34] inkluderar CMake det automatiska byggsystemet CPack för mjukvarupaket och CMake-modulen för att interagera med det. Systemet låter dig skapa mjukvarupaket för populära pakethanterare ( DEB , RPM , DMG ), programvaruinstallerare ( NSIS för Microsoft Windows ), samt bygga arkiv ( TGZ , TBZ2 , ZIP , självextraherande TGZ ) [35] .

Programvaruprojekt med CMake

CMake har blivit mycket utbrett bland projekt med öppen källkod, såväl som bland kommersiella och akademiska programvaruprojekt.

Öppen källkodsprojekt

Vetenskapliga forskningsprojekt

Mjukvaran som används i ATLAS-experimentet är byggd med CMake. Själva programvaran är skriven i C/C++ och Python [38] .

Ett forskningsinstitut i Frankrike, INRIA , har tillämpat CMake på medicinsk forskning i SOFA [39] -projektet .

Företag och projekt med sluten källkod

Exempel

Ett exempel på en enkel Hello, World! » projekt i CMake.

# Fil - "CMakeLists.txt" cmake_minimum_required ( VERSION 3.16 ) # Välj den minsta nödvändiga versionen av cmake project ( my_project ) # Ge projektet ett namn add_executable ( # Skapa ett mål (körbar) ${ PROJECT_NAME } # Filnamn main.cpp # Lista över källkodsfiler ) # Inget behov av att lägga till rubrikfiler installera ( # Ange målet och installationssökvägen MÅL ${ PROJECT_NAME } # Sökväg läggs till prefix RUNTIME DESTINATION bin # bin - binär (sökväg till körbara filer) ) # Standardprefix för UNIX-system # "/usr/local" + "/bin" // fil - "main.cpp" # inkluderar <iostream> int main () { std :: cout << "Hej världen!" << std :: endl ; returnera 0 ; }

Sammansättningen utförs med hjälp av följande kommandon i katalogen med filerna:

$ cmmake . # Anrop för att generera byggfiler $ cmake --build. # Vi samlar in målet, utdata är en körbar fil $ cmake --install . # Installera om det behövs

Samtidigt är det möjligt att få hjälpinformation om ett separat element i CMake-språket och dess kommandon.

$ cmake --help $ cmake --help-command-list $ cmake --help-command installera

Se även

Anteckningar

  1. CMake 3.24.3 är tillgänglig för nedladdning
  2. cmake Open Source Project på Open Hub: Languages-sidan - 2006.
  3. https://cmake.org/cmake/help/latest/manual/cmake-gui.1.html
  4. https://cmake.org/runningcmake
  5. https://gitlab.kitware.com/cmake/cmake
  6. 1 2 https://cmake.org/download/
  7. https://cmake.org/
  8. https://gitlab.kitware.com/cmake/cmake/blob/master/Copyright.txt
  9. cmake Open Source Project på Open Hub: Licenses-sida - 2006.
  10. https://cmake.org/licensing/
  11. Omfamna Modern CMake Hur man känner igen och använder moderna CMake-gränssnitt  ( PDF). Hämtad 4 april 2022. Arkiverad från originalet 20 januari 2022.
  12. FLOSS Weekly 111:  CMake . podcast. TWIT nätverk. . Hämtad 19 januari 2022. Arkiverad från originalet 6 oktober 2014.
  13. Om CMake  . cmake.org . Hämtad 15 mars 2022. Arkiverad från originalet 14 mars 2022.
  14. Översättning av kapitlet om CMake från The Architecture of Open Source Applications . rus-linux.net (28 augusti 2012). Hämtad 19 januari 2022. Arkiverad från originalet 7 maj 2021.
  15. ↑ CMake-kapitlet från The Architecture of Open Source Applications  . aosabook.org (2012). Datum för åtkomst: 19 januari 2022. Arkiverad från originalet den 7 april 2022.
  16. 1 2 Alexander Neundorf. Varför KDE- projektet bytte till CMake - och hur  . lwn.net (21 juni 2006). Hämtad 19 januari 2022. Arkiverad från originalet 20 november 2021.
  17. ↑ CMake-dokumentation : IDE Integration Guide  . cmake.org . Hämtad 26 januari 2022. Arkiverad från originalet 26 januari 2022.
  18. CMake-dokumentation: cmake-file-api(7  ) . cmake.org . Hämtad 26 januari 2022. Arkiverad från originalet 26 januari 2022.
  19. ↑ CMake-dokumentation : IDE med CMake-integration . cmake.org . Hämtad: 11 juli 2022.  
  20. CGör kompilatorfunktionen att upptäcka  . scivision.dev (15 november 2020). Hämtad 4 april 2022. Arkiverad från originalet 22 januari 2022.
  21. Kompilatorer  som stöds . CMake.org . Hämtad 4 april 2022. Arkiverad från originalet 21 februari 2022.
  22. CMake-dokumentation: cmake-toolchains(7  ) . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  23. Daniel Pfeifer. Effektiv CMake  (engelska) (PDF). GitHub (19 maj 2017). Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  24. ↑ CMake-dokumentation : cmake-buildsystem(7) - Objektbibliotek  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  25. ↑ CMake dokumentation : mål förkompilera rubriker  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  26. CMake-dokumentation: cmake-language(7  ) . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 21 februari 2022.
  27. Andrey Sedilnik. Mjukvaruutveckling på flera plattformar med CMake  . linuxjournal (3 oktober 2003). Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  28. ↑ CMake-dokumentation : cmake-commands(7) - add_executable  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  29. ↑ CMake-dokumentation : cmake-commands(7) - add_library  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  30. ↑ CMake-dokumentation : cmake-commands(7) - target_link_libraries  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  31. ↑ CMake-dokumentation : CMake 3.19 Release Notes  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 29 april 2022.
  32. CMake-dokumentation: cmake-modules(7  ) . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 9 december 2021.
  33. ↑ CMake-dokumentation : cmake-modules(7) - ExternalProject  . cmake.org . Hämtad 19 januari 2022. Arkiverad från originalet 21 februari 2022.
  34. CMake: Packaging With CPack -  KitwarePublic . gitlab . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  35. CMake:CPackPackageGenerators -  KitwarePublic . gitlab . Hämtad 19 januari 2022. Arkiverad från originalet 19 januari 2022.
  36. Blenderwiki - Building  Blender . blender.org . Datum för åtkomst: 19 januari 2022. Arkiverad från originalet 24 januari 2022.
  37. ↑ KDE använder CMake  . kitware.com . Hämtad 15 mars 2022. Arkiverad från originalet 14 mars 2022.
  38. J. Elmsheuser, A. Krasznahorkay, E. Obreshkov, A. Undrus. Storskalig mjukvarubyggnad med CMake i ATLAS  ( PDF). CERN . Hämtad 19 januari 2022. Arkiverad från originalet 10 november 2021.
  39. ↑ Konvertera SOFA till CMake  . kitware.com . Hämtad 15 mars 2022. Arkiverad från originalet 14 mars 2022.
  40. ↑ CMake, CTest och CDash på Netflix  . kitware.com . Hämtad 15 mars 2022. Arkiverad från originalet 14 mars 2022.
  41. Second Life väljer CMake som sitt  byggsystem . kitware.com . Hämtad 15 mars 2022. Arkiverad från originalet 14 mars 2022.

Länkar