CMake | |
---|---|
Type | Byg automatisering , gratis og open source software og hjælpeprogram |
Forfatter | Kitware Inc. [d] |
Udvikler | Kitware Inc. [d] , Alexander Neundorf [d] , Ken Martin [d] , Andrey Sedilnik [d] , William Hoffman [d] og Brad King [d] |
Skrevet i | C++ og C [2] |
Interface | Qt [3] [4] [5] |
Operativ system | Unix-lignende operativsystem [6] og Microsoft Windows [6] |
Interface sprog | engelsk |
Første udgave | 2000 |
Hardware platform | tværplatform [7] |
nyeste version |
|
Stat | aktiv |
Licens | modificeret BSD-licens [d] [8][9][10] |
Internet side | cmake.org _ |
Mediefiler på Wikimedia Commons |
CMake ( MFA [ ˈ s i ː m e ɪ k ]; fra engelsk. C ross-platform Make - " Cross- platform Make " [11] ) er et værktøj på tværs af platforme , der har evnen til at automatisere samlingen af software fra kildekode . CMake selv bygger ikke direkte, men genererer kun build-filer fra en forudskrevet scriptfil " CMakeLists.txt " og giver en enkel, samlet administrationsgrænseflade. Derudover er CMake i stand til at automatisere processen med installation og emballering .
Det betragtes som et alternativ til det Perl- og M4 -baserede Autotools -system, der er almindeligt i GNU -fællesskabet , som kræver visse færdigheder til praktisk brug, og eksisterende versioner er i nogle tilfælde inkompatible med hinanden.
Sammenlignet med Autotools-alternativet, der blev introduceret i 2008, er de Python - baserede SCons hurtigere, fordi de er skrevet i C og bruger et ekstremt simpelt makrosprog , men SCons er meget udvidelsesdygtige.
Udviklingen af CMake begyndte i 1999 som svar på et behov for et byggesystem på tværs af platforme til ITK [12] . Et projekt finansieret af US National Library of Medicine som en del af " Visible Human Project ". Udviklingsopgaven blev overdraget til et lille firma kaldet Kitware . Det var påvirket af et tidligere system kaldet "pcmaker" skabt af Ken Martin og andre for at understøtte Visualization Toolkit (VTK) [13] .
På det tidspunkt var det almindeligt at bruge konfigurationsscripts og lave filer til at bygge softwareprojekter på Unix-platforme og Visual Studio -projektfiler på Windows . Denne tilgang til udvikling medførte store besvær, da f.eks. tilføjelse af en almindelig kildekodefil til et projekt medførte store vanskeligheder, da det skulle gøres separat for hver platform og på helt forskellige måder. Det er klart, at udviklerne ønskede at have et enkelt, samlet byggesystem, der ikke var tidskrævende og havde alle fordelene ved eksisterende byggesystemer, men uden deres ulemper [14] [15] .
Nøglefunktionen er muligheden for (valgfrit) at placere compileroutput (såsom objektfiler) uden for kildetræet . Dette tillader flere variationer af builds fra den samme kildekode, såvel som krydskompilering . Denne tilgang til at adskille kilde- og build-filer sikrer, at sletning af build-mappen ikke fjerner kildekoden. Brugerne selv er dog ikke beskyttet mod utilsigtet sletning af kildebiblioteket [16] .
CMake kan finde system- og brugermapper til eksekverbare filer, konfigurationsfiler og biblioteker. Disse placeringer gemmes i en cache , der kan konfigureres, før målbyggefilerne genereres. CMake-cachen kan redigeres ved hjælp af den grafiske editor, der følger med CMake, eller manuelt gennem kommandolinjeskallen ved hjælp af CMake-kommandoer.
Komplekse projektkataloghierarkier designet til forskellige konfigurationer, bygning med forskellige biblioteker og værktøjer er også godt understøttet af CMake. I det væsentlige giver CMake muligheden for at oprette delprojekter, der er bygget før opbygningen af hovedprojektet, hvilket giver dig mulighed for at oprette afhængighedskæder, der er bygget i den korrekte rækkefølge, som udvikleren har brug for.
CMake kan generere projektfiler til flere populære IDE'er såsom Microsoft Visual Studio , Xcode og Eclipse CDT .
Det kan også oprette build-scripts til:
For at forenkle introduktionen af CMake-understøttelse i nye IDE'er, anbefales det at bruge de forudindstillede filer " CMakePresets.json " [17] , for mere bekvem konfiguration af byggeprocessen, samt " File API " [18] , som indeholder alle nødvendige oplysninger til IDE.
Følgende IDE'er understøtter CMake indbygget [19] :
CMake giver dig mulighed for at definere egenskaber, som compileren skal understøtte for at kompilere målprogrammet eller -biblioteket [20] .
CMake vedligeholder en omfattende liste over compilere [21] , som inkluderer:
Opbygning af et program eller bibliotek med CMake er en to-trins proces. Først oprettes (genereres) standard build-filer fra konfigurationsfiler ( CMakeLists.txt ), som er skrevet på CMake-sproget. Derefter bruges systembyggeværktøjerne (Make, Ninja osv.) til faktisk at bygge programmer [16] [22] .
Byggefilerne er konfigureret afhængigt af den anvendte generator (f.eks. er "Unix Makefiles"-generatoren til Makefiles). Avancerede brugere kan oprette og inkludere deres egne Make-filgeneratorer for at understøtte nye compilere og operativsystemer. De genererede filer placeres normalt (ved hjælp af et CMake-flag) i en ekstern mappe, uden for kildefilerne, såsom i " build "-mappen.
Hvert projekt efter bygning, i undermapper, indeholder " CMakeCache.txt " og en mappe med Make-filer, som hjælper med at undgå eller fremskynde "regenerering"-trinnet efter genstart af build [23] .
Afhængigt af konfigurationen af CMakeLists.txt og det valgte mål, kan build-filer oprette:
CMake kan oprette objektfiler, der kan linkes til eksekverbare binære filer/biblioteker ved at undgå dynamisk (runtime) linking og bruge statisk (kompileringstid) linking i stedet. Dette giver fleksibilitet ved opsætning af forskellige optimeringer (build-afhængigheder kan bestemmes automatisk) [24] .
Siden CMake 3.6 kan du oprette prækompilerede header-filer [25] .
CMake har et relativt simpelt fortolket imperativt scriptsprog . Det understøtter variabler , strengmanipulationsmetoder , arrays , funktions- og makrodeklarationer , modulinkludering (import). CMake sprogkommandoer (eller direktiver) læses af CMake fra filen CMakeLists.txt . Denne fil specificerer de kildefiler og build-indstillinger, som CMake placerer i projektets build-specifikation (f.eks. i en Make-fil). Derudover kan filer med præfiks med .cmake indeholde scripts brugt af CMake [26] .
Kommandoargumenter er adskilt af mellemrum og kan indeholde nøgleord til adskille grupper af argumenter. For eksempel i kommandoen
# Installer kommando installer ( TARGETS ... # TARGETS CONFIGURATIONS ... # CONFIGURATIONS (Debug, Release...) RUNTIME DESTINATION ... ) # (Eksekverbar, MACOSX_BUNDLE, DLL) DESTINATIONnøgleordene er TARGETS, CONFIGURATIONSog RUNTIME DESTINATION. I dette tilfælde tjener TARGETSde CONFIGURATIONSsom adskillere mellem "mål" og "konfigurationer" [27] .
Eksempler på CMake-kommandoer, der definerer mål og deres afhængigheder [28] [29] [30] :
CMake understøtter udtrækning af dataværdier til variabler fra JSON -strenge (siden version 3.19) [31] .
CMake kommer med en masse " .cmake " moduler og værktøjer. De gør det nemt at gøre ting som at finde afhængigheder (både indbyggede og eksterne, såsom FindXYZ- moduler), værktøjer til at teste eksekverbare filer, pakke ( CPack- modulet og cpack- kommandoen ) og administrere afhængigheder fra eksterne projekter (det eksterne projekt modul ) [32] [ 33] :
Fra og med version 2.4.2 [34] inkluderer CMake det automatiserede CPack -byggesystem til softwarepakker og CMake-modulet til at interagere med det. Systemet giver dig mulighed for at oprette softwarepakker til populære pakkeadministratorer ( DEB , RPM , DMG ), softwareinstallationsprogram ( NSIS til Microsoft Windows ), samt bygge arkiver ( TGZ , TBZ2 , ZIP , selvudpakkende TGZ ) [35] .
CMake er blevet meget udbredt blandt open source-projekter, såvel som blandt kommercielle og akademiske softwareprojekter.
Softwaren brugt i ATLAS-eksperimentet er bygget ved hjælp af CMake. Selve softwaren er skrevet i C/C++ og Python [38] .
Et forskningsinstitut i Frankrig, INRIA , har anvendt CMake til medicinsk forskning i SOFA [39] projektet .
Et eksempel på et simpelt Hej, verden! » projekt i CMake.
# Fil - "CMakeLists.txt" cmake_minimum_required ( VERSION 3.16 ) # Vælg den mindst nødvendige version af cmake project ( my_project ) # Giv projektet et navn add_executable ( # Opret et mål (eksekverbar) ${ PROJECT_NAME } # Filnavn main.cpp # Liste over kildekodefiler ) # Ingen grund til at tilføje header-filer installer ( # Angiv målet og installationsstien MÅL ${ PROJECT_NAME } # Sti tilføjet til præfikset RUNTIME DESTINATION bin # bin - binær (sti til eksekverbare filer) ) # Standardpræfiks for UNIX-systemer # "/usr/local" + "/bin" // fil - "main.cpp" # inkluderer <iostream> int main () { std :: cout << "Hej, verden!" << std :: endl ; returnere 0 ; }Samlingen udføres ved hjælp af følgende kommandoer i mappen med filerne:
$ cmake . # Kald for at generere build-filer $ cmake --build. # Vi indsamler målet, outputtet er en eksekverbar fil $ cmake --install . # Installer om nødvendigtSamtidig er det muligt at få hjælpeoplysninger om et separat element i CMake-sproget og dets kommandoer.
$ cmake --help $ cmake --help-command-list $ cmake --help-command installMonteringsautomatiseringssystemer | |
---|---|