CMake | |
---|---|
Tyyppi | Rakenna automaatiota , ilmaisia ja avoimen lähdekoodin ohjelmistoja ja apuohjelmia |
Tekijä | Kitware Inc. [d] |
Kehittäjä | Kitware Inc. [d] , Alexander Neundorf [d] , Ken Martin [d] , Andrey Sedilnik [d] , William Hoffman [d] ja Brad King [d] |
Sisään kirjoitettu | C++ ja C [2] |
Käyttöliittymä | Qt [3] [4] [5] |
Käyttöjärjestelmä | Unix-tyyppinen käyttöjärjestelmä [6] ja Microsoft Windows [6] |
Käyttöliittymäkielet | Englanti |
Ensimmäinen painos | 2000 |
Laitteistoalusta | monialustainen [7] |
uusin versio |
|
Osavaltio | aktiivinen |
Lisenssi | muutettu BSD-lisenssi [d] [8][9][10] |
Verkkosivusto | cmake.org _ |
Mediatiedostot Wikimedia Commonsissa |
CMake ( MFA [ ˈ s i ː m e ɪ k ]; englanniksi. C ross-platform Make - “ Cross- platform Make” [11] ) on monialustainen apuohjelma , jolla on kyky automatisoida ohjelmistojen kokoonpano lähdekoodi . CMake itse ei rakenna suoraan, vaan luo vain koontitiedostot valmiiksi kirjoitetusta komentosarjatiedostosta " CMakeLists.txt " ja tarjoaa yksinkertaisen, yhtenäisen hallintaliittymän. Lisäksi CMake pystyy automatisoimaan asennus- ja pakkausprosessin .
Sitä pidetään vaihtoehdona GNU - yhteisössä yleiselle Perl- ja M4 -pohjaiselle Autotools - järjestelmälle , joka vaatii tiettyjä taitoja käytännön käyttöön, ja olemassa olevat versiot ovat joissakin tapauksissa yhteensopimattomia keskenään.
Verrattuna vuonna 2008 esiteltyyn Autotools-vaihtoehtoon Python - pohjainen SCons on nopeampi, koska se on kirjoitettu C -kielellä ja käyttää erittäin yksinkertaista makrokieltä , mutta SCons on erittäin laajennettavissa.
CMaken kehittäminen aloitettiin vuonna 1999 vastauksena tarpeeseen luoda monialustainen rakennusjärjestelmä ITK :lle [12] . Yhdysvaltain kansallisen lääketieteen kirjaston rahoittama hanke osana " Visible Human Project ". Kehitystehtävä uskottiin pienelle yritykselle nimeltä Kitware . Siihen vaikutti aikaisempi järjestelmä nimeltä "pcmaker", jonka Ken Martin ja muut loivat tukemaan Visualization Toolkit (VTK) [13] .
Tuolloin oli yleistä käyttää konfigurointikomentosarjoja ja tehdä tiedostoja ohjelmistoprojektien rakentamiseen Unix-alustoille ja Visual Studio -projektitiedostoille Windowsissa . Tämä lähestymistapa kehittämiseen aiheutti suurta vaivaa, sillä esimerkiksi tavallisen lähdekooditiedoston lisääminen projektiin johti suuriin vaikeuksiin, koska se piti tehdä jokaiselle alustalle erikseen ja täysin eri tavoilla. Ilmeisesti kehittäjät halusivat yhden, yhtenäisen rakennusjärjestelmän, joka ei vie aikaa ja jossa olisi kaikki olemassa olevien rakennusjärjestelmien edut, mutta ilman niiden haittoja [14] [15] .
Keskeinen ominaisuus on kyky (valinnaisesti) sijoittaa kääntäjän tulosteet (kuten objektitiedostot) lähdepuun ulkopuolelle . Tämä mahdollistaa useiden koontiversioiden saman lähdekoodin sekä ristiin kääntämisen . Tämä lähde- ja koontitiedostojen erottelutapa varmistaa, että koontihakemiston poistaminen ei poista lähdekoodia. Käyttäjiä itseään ei kuitenkaan suojata lähdehakemiston tahattomalta poistamiselta [16] .
CMake löytää järjestelmän laajuiset ja käyttäjähakemistot suoritettaville tiedostoille, asetustiedostoille ja kirjastoille. Nämä sijainnit tallennetaan välimuistiin , joka voidaan määrittää ennen kuin kohdekoontitiedostot luodaan. CMake-välimuistia voidaan muokata CMaken mukana tulevalla graafisella editorilla tai manuaalisesti komentoriviltä käyttämällä CMake-komentoja.
CMake tukee hyvin myös monimutkaisia projektihakemistohierarkioita, jotka on suunniteltu erilaisiin kokoonpanoihin, rakentamiseen erilaisilla kirjastoilla ja työkaluilla. Pohjimmiltaan CMake tarjoaa mahdollisuuden luoda aliprojekteja, jotka on rakennettu ennen pääprojektin rakentamista, mikä mahdollistaa riippuvuusketjujen luomisen, jotka on rakennettu kehittäjän tarvitsemassa järjestyksessä.
CMake voi luoda projektitiedostoja useille suosituille IDE :ille , kuten Microsoft Visual Studio , Xcode ja Eclipse CDT .
Se voi myös luoda rakennusskriptejä:
CMake-tuen käyttöönoton yksinkertaistamiseksi uusissa IDE:issä on suositeltavaa käyttää valmiita tiedostoja " CMakePresets.json " [17] rakennusprosessin konfiguroinnin helpottamiseksi sekä " File API " [18] , joka sisältää kaikki IDE:lle tarvittavat tiedot.
Seuraavat IDE:t tukevat CMakea alkuperäisesti [19] :
CMake antaa sinun määrittää ominaisuuksia, joita kääntäjän on tuettava voidakseen kääntää kohdeohjelman tai -kirjaston [20] .
CMake ylläpitää laajaa luetteloa kääntäjistä [21] , joka sisältää:
Ohjelman tai kirjaston luominen CMaken avulla on kaksivaiheinen prosessi. Ensin luodaan (luodaan) standardikoontitiedostot konfiguraatiotiedostoista ( CMakeLists.txt ), jotka on kirjoitettu CMake-kielellä. Sitten järjestelmän rakentamistyökaluja (Make, Ninja jne.) käytetään ohjelmien rakentamiseen [16] [22] .
Rakennustiedostot konfiguroidaan käytetyn generaattorin mukaan (esimerkiksi "Unix Makefiles" -generaattori on Makefileille). Edistyneet käyttäjät voivat luoda ja sisällyttää omia Make-tiedostogeneraattoreita tukemaan uusia kääntäjiä ja käyttöjärjestelmiä. Luodut tiedostot sijoitetaan yleensä (käyttäen CMake-lippua) ulkoiseen hakemistoon, lähdetiedostojen ulkopuolelle, kuten " build " -hakemistoon.
Jokainen projekti rakentamisen jälkeen alihakemistoissa sisältää " CMakeCache.txt " ja Make-tiedostojen hakemiston, mikä auttaa välttämään tai nopeuttamaan "regenerointia" koontiversion uudelleenkäynnistyksen jälkeen [23] .
CMakeLists.txt -tiedoston kokoonpanosta ja valitusta kohteesta riippuen koontitiedostot voivat luoda:
CMake voi luoda objektitiedostoja, jotka voidaan linkittää suoritettaviin binääriin/kirjastoihin välttämällä dynaamista (ajonaikaista) linkitystä ja käyttämällä sen sijaan staattista (käännösaika) linkitystä. Tämä tarjoaa joustavuutta erilaisten optimointien määrittämisessä (koonnosten riippuvuudet voidaan määrittää automaattisesti) [24] .
CMake 3.6:sta lähtien voit luoda esikäännettyjä otsikkotiedostoja [25] .
CMake on suhteellisen yksinkertainen , tulkittu pakottava komentosarjakieli . Se tukee muuttujia , merkkijonojen käsittelymenetelmiä , taulukoita , funktio- ja makroilmoituksia , moduulien sisällyttämistä (tuontia). CMake lukee CMake -kielen komennot (tai käskyt) CMakeLists.txt- tiedostosta . Tämä tiedosto määrittää lähdetiedostot ja koontiversion asetukset, jotka CMake sijoittaa projektin koontimäärityksessä (esimerkiksi Make-tiedostoon). Lisäksi tiedostot, joiden etuliite on .cmake , voivat sisältää komentosarjoja, joita CMake käyttää [26] .
Komentoargumentit erotetaan välilyönnillä, ja ne voivat sisältää avainsanoja eri argumenttiryhmiin. Esimerkiksi komennossa
# Asenna komento install ( TARGETS ... # TARGETS CONFIGURATIONS ... # CONFIGURATIONS (Debug, Release...) RUNTIME DESTINATION ... ) # (Suoritettava, MACOSX_BUNDLE, DLL) DESTINATIONavainsanat ovat TARGETS, CONFIGURATIONSja RUNTIME DESTINATION. Tässä tapauksessa TARGETSne CONFIGURATIONStoimivat erottimina "tavoitteiden" ja "kokoonpanojen" välillä [27] .
Esimerkkejä CMake-komennoista, jotka määrittävät kohteet ja niiden riippuvuudet [28] [29] [30] :
CMake tukee data-arvojen purkamista muuttujiksi JSON -merkkijonoista (versiosta 3.19 lähtien) [31] .
CMake sisältää paljon " .cmake " -moduuleja ja työkaluja. Niiden avulla on helppoa etsiä riippuvuuksia (sekä sisäänrakennettuja että ulkoisia, kuten FindXYZ - moduuleja), työkaluja suoritettavien tiedostojen testaamiseen, pakkaamista ( CPack- moduuli ja cpack -komento ) ja riippuvuuksien hallintaa ulkoisista projekteista ( ExternalProject ). moduuli ) [32] [ 33] :
Versiosta 2.4.2 alkaen [34] CMake sisältää CPack- automaattisen koontijärjestelmän ohjelmistopaketteja varten ja CMake-moduulin vuorovaikutukseen sen kanssa. Järjestelmän avulla voit luoda ohjelmistopaketteja suosituille paketinhallintaohjelmille ( DEB , RPM , DMG ), ohjelmistoasentajalle ( NSIS Microsoft Windowsille ) sekä rakentaa arkistoja ( TGZ , TBZ2 , ZIP , itsepurkautuva TGZ ) [35] .
CMake on levinnyt erittäin laajalle avoimen lähdekoodin projekteissa sekä kaupallisissa ja akateemisissa ohjelmistoprojekteissa.
ATLAS-kokeessa käytetty ohjelmisto on rakennettu käyttämällä CMakea. Itse ohjelmisto on kirjoitettu C/C++:lla ja Pythonilla [38] .
Ranskalainen tutkimuslaitos INRIA on soveltanut CMakea lääketieteelliseen tutkimukseen SOFA [39] -projektissa .
Esimerkki yksinkertaisesta Hello, World! » projekti CMakessa.
# Tiedosto - "CMakeLists.txt" cmake_minimum_required ( VERSIO 3.16 ) # Valitse cmaken vähimmäisvaatimus projekti ( my_project ) # Anna projektille nimi add_executable ( # Luo kohde (suoritettava) ${ PROJECT_NAME } # Tiedoston nimi main.cpp # Luettelo lähdekooditiedostoista ) # Otsikkotiedostoja ei tarvitse lisätä install ( # Määritä kohde ja asennuspolku TARGETS ${ PROJECT_NAME } # Polku liitetty etuliitteeseen RUNTIME DESTINATION bin # bin - binaari (polku suoritettaviin tiedostoihin) ) # Vakioetuliite UNIX-järjestelmille # "/usr/local" + "/bin" // tiedosto - "main.cpp" # sisältää <iostream> int main () { std :: cout << "Hei, maailma!" << std :: endl ; paluu 0 ; }Kokoonpano suoritetaan käyttämällä seuraavia komentoja tiedostojen hakemistossa:
$ cmake . # Soita luodaksesi koontitiedostot $ cmake --build . # Keräämme kohteen, tulos on suoritettava tiedosto $ cmake --install . # Asenna tarvittaessaSamalla on mahdollista saada apua CMake-kielen erillisestä elementistä ja sen komennoista.
$ cmake --help $ cmake --help-command-list $ cmake --help-command installAsennusautomaatiojärjestelmät | |
---|---|