CMake | |
---|---|
Tip de | Creați automatizare , software gratuit și open source și utilitare |
Autor | Kitware Inc. [d] |
Dezvoltator | Kitware Inc. [d] , Alexander Neundorf [d] , Ken Martin [d] , Andrey Sedilnik [d] , William Hoffman [d] și Brad King [d] |
Scris in | C++ și C [2] |
Interfață | Qt [3] [4] [5] |
Sistem de operare | Sistem de operare asemănător Unix [6] și Microsoft Windows [6] |
Limbi de interfață | Engleză |
Prima editie | 2000 |
Platformă hardware | multiplatformă [7] |
ultima versiune |
|
Stat | activ |
Licență | licență BSD modificată [d] [8][9][10] |
Site-ul web | cmake.org _ |
Fișiere media la Wikimedia Commons |
CMake ( MFA [ ˈ s i ː m e ɪ k ]; din engleză. Cross -platform Make - „ Cross- platform Make” [11] ) este un utilitar multiplatformă care are capacitatea de a automatiza asamblarea software-ului din cod sursă . CMake în sine nu construiește direct, ci generează doar fișiere de compilare dintr-un fișier script pre-scris „ CMakeLists.txt ” și oferă o interfață de management simplă și unificată. În plus, CMake este capabil să automatizeze procesul de instalare și ambalare .
Este considerată o alternativă la sistemul Autotools bazat pe Perl și M4 , comun în comunitatea GNU , care necesită anumite abilități pentru utilizare practică, iar versiunile existente sunt în unele cazuri incompatibile între ele.
În comparație cu alternativa Autotools introdusă în 2008, SCons bazat pe Python este mai rapid deoarece este scris în C și folosește un limbaj macro extrem de simplu , dar SCons este foarte extensibil.
Dezvoltarea CMake a început în 1999 ca răspuns la necesitatea unui sistem de construcție multiplatformă pentru ITK [12] . Un proiect finanțat de Biblioteca Națională de Medicină din SUA ca parte a „ Visible Human Project ”. Sarcina de dezvoltare a fost încredințată unei mici companii numite Kitware . A fost influențat de un sistem anterior numit „pcmaker” creat de Ken Martin și alții pentru a sprijini Visualization Toolkit (VTK) [13] .
La acea vreme, era obișnuit să se folosească scripturi de configurare și să creeze fișiere pentru a construi proiecte software pe platformele Unix și fișiere de proiect Visual Studio pe Windows . Această abordare a dezvoltării a cauzat mari inconveniente, deoarece, de exemplu, adăugarea unui fișier cod sursă obișnuit la un proiect a dus la mari dificultăți, deoarece trebuia făcută separat pentru fiecare platformă și în moduri complet diferite. În mod evident, dezvoltatorii doreau să aibă un singur sistem de construcție unificat, care să nu consume timp și să aibă toate avantajele sistemelor de construcție existente, dar fără dezavantajele acestora [14] [15] .
Caracteristica cheie este capacitatea de a plasa (opțional) rezultatul compilatorului (cum ar fi fișierele obiect) în afara arborelui sursă . Acest lucru permite mai multe variante de versiuni din același cod sursă, precum și compilarea încrucișată . Această abordare de separare a fișierelor sursă și de compilare asigură că ștergerea directorului de compilare nu elimină codul sursă. Cu toate acestea, utilizatorii înșiși nu sunt protejați de ștergerea accidentală a directorului sursă [16] .
CMake poate găsi directoare la nivel de sistem și de utilizator pentru executabile, fișiere de configurare și biblioteci. Aceste locații sunt stocate într-un cache care poate fi configurat înainte ca fișierele de compilare țintă să fie generate. Cache-ul CMake poate fi editat folosind editorul grafic care vine cu CMake sau manual prin shell-ul liniei de comandă folosind comenzile CMake.
Ierarhiile complexe de directoare de proiect concepute pentru diferite configurații, construirea cu biblioteci și instrumente diferite sunt, de asemenea, bine susținute de CMake. În esență, CMake oferă capacitatea de a crea subproiecte care sunt construite înainte de a construi proiectul principal, ceea ce vă permite să creați lanțuri de dependențe care sunt construite în secvența corectă necesară dezvoltatorului.
CMake poate genera fișiere de proiect pentru mai multe IDE -uri populare, cum ar fi Microsoft Visual Studio , Xcode și Eclipse CDT .
De asemenea, poate crea scripturi de compilare pentru:
Pentru a simplifica introducerea suportului CMake în noile IDE-uri, se recomandă utilizarea fișierelor presetate „ CMakePresets.json ” [17] , pentru o configurare mai convenabilă a procesului de construire, precum și „ Fișier API ” [18] , care conține toate informațiile necesare pentru IDE.
Următoarele IDE-uri suportă CMake nativ [19] :
CMake vă permite să definiți proprietățile pe care compilatorul trebuie să le suporte pentru a compila programul sau biblioteca țintă [20] .
CMake menține o listă extinsă de compilatoare [21] care include:
Construirea unui program sau a unei biblioteci cu CMake este un proces în doi pași. În primul rând, fișierele de compilare standard sunt create (generate) din fișierele de configurare ( CMakeLists.txt ), care sunt scrise în limbajul CMake. Apoi instrumentele de construire a sistemului (Make, Ninja, etc.) sunt folosite pentru a construi efectiv programe [16] [22] .
Fișierele de compilare sunt configurate în funcție de generatorul utilizat (de exemplu, generatorul „Unix Makefiles” este pentru Makefiles). Utilizatorii avansați își pot crea și include propriile generatoare de fișiere Make pentru a suporta noi compilatoare și sisteme de operare. Fișierele generate sunt de obicei plasate (folosind un flag CMake) într-un director extern, în afara fișierelor sursă, cum ar fi în directorul „ build ”.
Fiecare proiect după construcție, în subdirectoare conține „ CMakeCache.txt ” și un director de fișiere Make, care ajută la evitarea sau accelerarea pasului de „regenerare”, după repornirea build-ului [23] .
În funcție de configurația CMakeLists.txt și de ținta aleasă, fișierele de compilare pot crea:
CMake poate crea fișiere obiect care pot fi legate la binare/biblioteci executabile, evitând legăturile dinamice (de execuție) și folosind în schimb legăturile statice (timpul de compilare). Acest lucru oferă flexibilitate în configurarea diferitelor optimizări (dependențele de construire pot fi determinate automat) [24] .
Începând cu CMake 3.6, puteți crea fișiere de antet precompilate [25] .
CMake are un limbaj de scripting imperativ interpretat relativ simplu . Suportă variabile , metode de manipulare a șirurilor de caractere , matrice , declarații de funcții și macro , includerea modulelor (import). Comenzile (sau directivele) limbajului CMake sunt citite de CMake din fișierul CMakeLists.txt . Acest fișier specifică fișierele sursă și opțiunile de compilare pe care CMake le plasează în specificația de construcție a proiectului (de exemplu, într-un fișier Make). În plus, fișierele prefixate cu .cmake pot conține scripturi utilizate de CMake [26] .
Argumentele comenzii sunt separate prin spații și pot conține cuvinte cheie pentru a separa grupuri de argumente. De exemplu, în comandă
# Instalare comanda de instalare ( ȚINTE ... # ȚINTE CONFIGURAȚII ... # CONFIGURAȚII (Depanare, Lansare...) RUNTIME DESTINATION ... ) # (Executabil, MACOSX_BUNDLE, DLL) DESTINAȚIEcuvintele cheie sunt TARGETS, CONFIGURATIONSși RUNTIME DESTINATION. În acest caz TARGETS, ele CONFIGURATIONSservesc ca separatori între „obiective” și „configurații” [27] .
Exemple de comenzi CMake care definesc ținte și dependențele acestora [28] [29] [30] :
CMake acceptă extragerea valorilor datelor în variabile din șiruri JSON (începând cu versiunea 3.19) [31] .
CMake vine cu o mulțime de module și instrumente „ .cmake ”. Ele ușurează să faci lucruri precum căutarea dependențelor (atât încorporate, cât și externe, cum ar fi modulele FindXYZ ), instrumente pentru testarea executabilelor, ambalarea ( modulul CPack și comanda cpack ) și gestionarea dependențelor din proiecte externe ( ExternalProject ). modul ) [32] [ 33] :
Începând cu versiunea 2.4.2 [34] , CMake include sistemul de construcție automată CPack pentru pachetele software și modulul CMake pentru interacțiunea cu acesta. Sistemul vă permite să creați pachete software pentru managerii de pachete populari ( DEB , RPM , DMG ), instalator de software ( NSIS pentru Microsoft Windows ), precum și să construiți arhive ( TGZ , TBZ2 , ZIP , TGZ autoextractabil ) [35] .
CMake a devenit foarte răspândit printre proiectele open source, precum și printre proiectele software comerciale și academice.
Software-ul folosit în experimentul ATLAS este construit folosind CMake. Software-ul în sine este scris în C/C++ și Python [38] .
Un institut de cercetare din Franța, INRIA , a aplicat CMake cercetării medicale în cadrul proiectului SOFA [39] .
Un exemplu de simplu Hello, World! » proiect în CMake.
# Fișier - „CMakeLists.txt” cmake_minimum_required ( VERSIUNEA 3.16 ) # Selectați versiunea minimă necesară de cmake proiect ( my_project ) # Dați un nume proiectului add_executable ( # Creați o țintă (executable) ${ PROJECT_NAME } # Nume fișier main.cpp # Lista fișierelor de cod sursă ) # Nu este nevoie să adăugați fișiere de antet install ( # Specificați ținta și calea de instalare ȚINTE ${ PROJECT_NAME } # Cale atașată la prefix RUNTIME DESTINATION bin # bin - binar (calea către fișierele executabile) ) # Prefix standard pentru sistemele UNIX # "/usr/local" + "/bin" // fișier - "main.cpp" # include <iostream> int main () { std :: cout << "Bună ziua, lume!" << std :: endl ; returnează 0 ; }Asamblarea se realizează folosind următoarele comenzi în directorul cu fișierele:
$ cmake . # Apelați pentru a genera fișiere de compilare $ cmake --build . # Colectăm ținta, rezultatul este un fișier executabil $ cmake --install . # Dacă este necesar, instalațiÎn același timp, este posibil să obțineți informații de ajutor despre un element separat al limbajului CMake și comenzile acestuia.
$ cmake --help $ cmake --help-command-list $ cmake --help-command installAsamblare sisteme de automatizare | |
---|---|