CMake

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 12.10.2020 tarkistetusta versiosta . tarkastukset vaativat 54 muokkausta .
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.

Historia

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] .

Ominaisuudet

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] .

Muokattu projektirakenne

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ä.

Tuki erilaisille kehitysympäristöille

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] :

Kääntäjän tuki

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ää:

Kokoamisprosessi

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] .

Rakenna kohdetyypit

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] .

Esikäännetyt otsikkotiedostot

CMake 3.6:sta lähtien voit luoda esikäännettyjä otsikkotiedostoja [25] .

Kieli

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] .

Komentosyntaksi

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) DESTINATION

avainsanat 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] :

  • add_executable(...)- määrittää kohteen (suoritettava tiedosto, esim. .exe , riippuu kohdealustasta);
  • add_library(...)- määrittää kohteen (kirjasto, esim. .so tai .dll );
  • target_link_libraries(...)— määrittää määritetyn kohteen riippuvuudet.

JSON-tuki

CMake tukee data-arvojen purkamista muuttujiksi JSON -merkkijonoista (versiosta 3.19 lähtien) [31] .

Moduulit ja työkalut

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] :

  • ctest - käytetään CMakeLists.txt:ssä määritettyjen kohteiden testaamiseen ;
  • ccmake ja cmake-gui - määrittää ja päivittää kohdekoontijärjestelmälle tarkoitetut konfiguraatiomuuttujat;
  • cpack - Auttaa pakkaamaan ja asentamaan ohjelmistoja.

CPack

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] .

Ohjelmistoprojektit CMakella

CMake on levinnyt erittäin laajalle avoimen lähdekoodin projekteissa sekä kaupallisissa ja akateemisissa ohjelmistoprojekteissa.

Avoimen lähdekoodin projektit

Tieteelliset tutkimusprojektit

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 .

Suljetun lähdekoodin yritykset ja projektit

  • Netflix (elokuvien ja sarjojen suoratoistopalvelu) [40] ;
  • Second Life (virtuaalimaailma sosiaalisten verkostojen elementeillä) [41] .

Esimerkki

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 tarvittaessa

Samalla on mahdollista saada apua CMake-kielen erillisestä elementistä ja sen komennoista.

$ cmake --help $ cmake --help-command-list $ cmake --help-command install

Katso myös

Muistiinpanot

  1. CMake 3.24.3 on ladattavissa
  2. Cmake Open Source -projekti Open Hubissa: Languages Page - 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 Open Hubissa: Lisenssisivu - 2006.
  10. https://cmake.org/licensing/
  11. Nykyaikaisen CMake-käyttöliittymän tunnistaminen ja käyttäminen  ( PDF). Haettu 4. huhtikuuta 2022. Arkistoitu alkuperäisestä 20. tammikuuta 2022.
  12. FLOSS Weekly 111:  CMake . podcast. TWIT-verkko. . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 6. lokakuuta 2014.
  13. Tietoja CMakesta  . cmake.org . Haettu 15. maaliskuuta 2022. Arkistoitu alkuperäisestä 14. maaliskuuta 2022.
  14. CMakea käsittelevän luvun käännös julkaisusta The Architecture of Open Source Applications . rus-linux.net (28. elokuuta 2012). Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 7. toukokuuta 2021.
  15. ↑ CMake luku julkaisusta The Architecture of Open Source Applications  . aosabook.org (2012). Käyttöpäivä: 19. tammikuuta 2022. Arkistoitu alkuperäisestä 7. huhtikuuta 2022.
  16. 1 2 Alexander Neundorf. Miksi KDE - projekti siirtyi CMakeen - ja miten  . lwn.net (21. kesäkuuta 2006). Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 20. marraskuuta 2021.
  17. ↑ CMake-dokumentaatio : IDE-integraatioopas  . cmake.org . Haettu 26. tammikuuta 2022. Arkistoitu alkuperäisestä 26. tammikuuta 2022.
  18. CMake-dokumentaatio: cmake-file-api(7  ) . cmake.org . Haettu 26. tammikuuta 2022. Arkistoitu alkuperäisestä 26. tammikuuta 2022.
  19. ↑ CMake - dokumentaatio : IDE : t CMake - integraatiolla . cmake.org . Haettu: 11.7.2022.  
  20. CMake kääntäjäominaisuus havaitsemaan  . scivision.dev (15. marraskuuta 2020). Haettu 4. huhtikuuta 2022. Arkistoitu alkuperäisestä 22. tammikuuta 2022.
  21. Tuetut kääntäjät  . CMake.org . Haettu 4. huhtikuuta 2022. Arkistoitu alkuperäisestä 21. helmikuuta 2022.
  22. CMake-dokumentaatio: cmake-toolchains(7  ) . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  23. Daniel Pfeifer. Tehokas CMake  (englanniksi) (PDF). GitHub (19. toukokuuta 2017). Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  24. ↑ CMake-dokumentaatio : cmake-buildsystem(7) - Objektikirjastot  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  25. ↑ CMake - dokumentaatio : kohde esikäännösotsikot  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  26. CMake-dokumentaatio: cmake-language(7  ) . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 21. helmikuuta 2022.
  27. Andrei Sedilnik. Monialustainen ohjelmistokehitys käyttämällä CMakea  . linuxjournal (3. lokakuuta 2003). Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  28. ↑ CMake-dokumentaatio : cmake-commands(7) - add_executable  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  29. ↑ CMake-dokumentaatio : cmake-commands(7) - add_library  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  30. ↑ CMake-dokumentaatio : cmake-commands(7) - target_link_libraries  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  31. ↑ CMake-dokumentaatio : CMake 3.19:n julkaisutiedot  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 29. huhtikuuta 2022.
  32. CMake-dokumentaatio: cmake-modules(7  ) . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 9. joulukuuta 2021.
  33. ↑ CMake-dokumentaatio : cmake-modules(7) - ExternalProject  . cmake.org . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 21. helmikuuta 2022.
  34. CMake: Packaging With CPack -  KitwarePublic . gitlab . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  35. CMake:CPackPackageGenerators -  KitwarePublic . gitlab . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 19. tammikuuta 2022.
  36. Blender wiki - Building  Blender . blender.org . Käyttöpäivä: 19. tammikuuta 2022. Arkistoitu alkuperäisestä 24. tammikuuta 2022.
  37. ↑ KDE ottaa käyttöön CMake  . kitware.com . Haettu 15. maaliskuuta 2022. Arkistoitu alkuperäisestä 14. maaliskuuta 2022.
  38. J. Elmsheuser, A. Krasznahorkay, E. Obreshkov, A. Undrus. Laajamittainen ohjelmistorakennus CMakella ATLAS-  muodossa ( PDF). CERN . Haettu 19. tammikuuta 2022. Arkistoitu alkuperäisestä 10. marraskuuta 2021.
  39. SOFA :n muuntaminen CMakeksi  . kitware.com . Haettu 15. maaliskuuta 2022. Arkistoitu alkuperäisestä 14. maaliskuuta 2022.
  40. ↑ CMake, CTest ja CDash Netflixissä  . kitware.com . Haettu 15. maaliskuuta 2022. Arkistoitu alkuperäisestä 14. maaliskuuta 2022.
  41. Second Life valitsee CMaken  rakennusjärjestelmäkseen . kitware.com . Haettu 15. maaliskuuta 2022. Arkistoitu alkuperäisestä 14. maaliskuuta 2022.

Linkit