CMake

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. október 12-én felülvizsgált verziótól ; az ellenőrzések 54 szerkesztést igényelnek .
CMake
Típusú Építsen automatizálást , ingyenes és nyílt forráskódú szoftvereket és segédprogramokat
Szerző Kitware Inc. [d]
Fejlesztő Kitware Inc. [d] , Alexander Neundorf [d] , Ken Martin [d] , Andrey Sedilnik [d] , William Hoffman [d] és Brad King [d]
Beírva C++ és C [2]
Felület Qt [3] [4] [5]
Operációs rendszer Unix-szerű operációs rendszer [6] és Microsoft Windows [6]
Interfész nyelvek angol
Első kiadás 2000
Hardver platform többplatformos [7]
legújabb verzió
Állapot aktív
Engedély módosított BSD licenc [d] [8][9][10]
Weboldal cmake.org
 Médiafájlok a Wikimedia Commons oldalon

A CMake ( MFA [ ˈ s i ː m e ɪ k ]; angolból.  C ross-platform Make - “ Cross- platform Make” [11] ) egy többplatformos segédprogram , amely képes automatizálni a szoftverek összeállítását forráskód . A CMake maga nem épít közvetlenül, hanem csak összeállítási fájlokat hoz létre egy előre megírt " CMakeLists.txt " szkriptfájlból , és egyszerű, egységes kezelőfelületet biztosít. Ezenkívül a CMake képes automatizálni a telepítési és csomagolási folyamatot .

A GNU közösségben elterjedt Perl és M4 alapú Autotools rendszer alternatívájának tekintik , amelynek gyakorlati használatához bizonyos készségekre van szükség, és a meglévő verziók bizonyos esetekben nem kompatibilisek egymással.

A 2008 -ban bevezetett Autotools alternatívához képest a Python - alapú SCons gyorsabb, mert C nyelven íródott, és rendkívül egyszerű makrónyelvet használ , de az SCons nagyon bővíthető.

Történelem

A CMake fejlesztése 1999 -ben kezdődött, válaszul az ITK -hoz [12] egy többplatformos build rendszerre . Az Egyesült Államok Nemzeti Orvostudományi Könyvtára által finanszírozott projekt a " Visible Human Project " részeként. A fejlesztési feladattal a Kitware nevű kis céget bízták meg . Egy korábbi, "pcmaker" nevű rendszer befolyásolta, amelyet Ken Martin és mások hoztak létre a Visualization Toolkit (VTK) támogatására [13] .

Abban az időben általános volt a konfigurációs szkriptek használata és a fájlok létrehozása Unix platformokon szoftverprojektek , Windows rendszeren pedig Visual Studio projektfájlok létrehozásához . Ez a fejlesztési megközelítés nagy kényelmetlenséget okozott, hiszen például egy közönséges forráskód-fájl hozzáadása egy projekthez nagy nehézségekbe ütközött, mivel ezt minden platformon külön és teljesen más módon kellett megtenni. Nyilvánvaló, hogy a fejlesztők egyetlen, egységes összeállítási rendszert akartak, amely nem időigényes, és a meglévő build rendszerek minden előnyével rendelkezik, de hátrányai nélkül [14] [15] .

Jellemzők

A legfontosabb jellemzője az a képesség, hogy (opcionálisan) a fordító kimenetét (például objektumfájlokat) a forrásfán kívülre helyezzük . Ez lehetővé teszi az azonos forráskódból származó buildek több változatát, valamint a keresztfordítást . A forrás- és buildfájlok elválasztásának ez a megközelítése biztosítja, hogy a build könyvtár törlése ne távolítsa el a forráskódot. Maguk a felhasználók azonban nincsenek védve a forráskönyvtár véletlen törlésével szemben [16] .

Egyedi projektstruktúra

A CMake rendszerszintű és felhasználói könyvtárakat talál a végrehajtható fájlok, konfigurációs fájlok és könyvtárak számára. Ezek a helyek a gyorsítótárban vannak tárolva, amely a cél build fájlok létrehozása előtt konfigurálható. A CMake gyorsítótár szerkeszthető a CMake-hez mellékelt grafikus szerkesztővel, vagy manuálisan a parancssori shell segítségével, a CMake parancsok használatával.

A CMake jól támogatja a különböző konfigurációkhoz tervezett komplex projektkönyvtár-hierarchiákat, a különböző könyvtárakkal és eszközökkel történő építkezést. Lényegében a CMake lehetőséget biztosít olyan alprojektek létrehozására, amelyek a fő projekt felépítése előtt épülnek fel, ami lehetővé teszi a függőségi láncok létrehozását, amelyek a fejlesztő számára megfelelő sorrendben épülnek fel.

Különböző fejlesztői környezetek támogatása

A CMake számos népszerű IDE -hez képes projektfájlokat generálni , például a Microsoft Visual Studio , az Xcode és az Eclipse CDT számára .

Építési szkripteket is létrehozhat:

A CMake támogatás új IDE-kbe való bevezetésének leegyszerűsítése érdekében javasolt a " CMakePresets.json " [17] előre beállított fájlok használata az építési folyamat kényelmesebb konfigurálásához, valamint a " File API " [18] , amely tartalmazza az IDE-hez szükséges összes információt.

A következő IDE-k natívan támogatják a CMake-et [19] :

Fordító támogatás

A CMake lehetővé teszi olyan tulajdonságok meghatározását, amelyeket a fordítónak támogatnia kell a célprogram vagy könyvtár fordításához [20] .

A CMake kiterjedt listát tart fenn a fordítókról [21] , amely a következőket tartalmazza:

Összeszerelési folyamat

A program vagy könyvtár létrehozása a CMake segítségével kétlépéses folyamat. Először a szabványos build fájlok jönnek létre (generálódnak) konfigurációs fájlokból ( CMakeLists.txt ), amelyek a CMake nyelven vannak megírva. Ezután a rendszerépítő eszközöket (Make, Ninja stb.) használják a programok tényleges összeállítására [16] [22] .

Az összeállítási fájlok a használt generátortól függően vannak konfigurálva (például a "Unix Makefiles" generátor a Makefileshez való). A haladó felhasználók létrehozhatják és beépíthetik saját Make fájlgenerátoraikat az új fordítók és operációs rendszerek támogatására. A generált fájlok általában (CMake jelzővel) egy külső könyvtárba kerülnek, a forrásfájlokon kívülre, például a " build " könyvtárba.

Minden projekt felépítés után az alkönyvtárakban tartalmazza a " CMakeCache.txt " fájlt és a Make fájlok könyvtárát, amely segít elkerülni vagy felgyorsítani a "regenerálás" lépést a build újraindítása után [23] .

Építési céltípusok

A CMakeLists.txt konfigurációjától és a kiválasztott céltól függően az összeállítási fájlok létrehozhatják:

A CMake olyan objektumfájlokat tud létrehozni, amelyek futtatható binárisokhoz/könyvtárakhoz kapcsolhatók, elkerülve a dinamikus (futásidejű) hivatkozást, és helyette statikus (fordítási idejű) hivatkozást használnak. Ez rugalmasságot biztosít a különféle optimalizációk beállításában (az összeállítási függőségek automatikusan meghatározhatók) [24] .

Előre lefordított fejlécfájlok

A CMake 3.6 óta előre lefordított fejlécfájlokat hozhat létre [25] .

Nyelv

A CMake egy viszonylag egyszerű , értelmezett kötelező szkriptnyelvvel rendelkezik . Támogatja a változókat , a karakterlánc-manipulációs módszereket , a tömböket , a függvény- és makródeklarációkat , a modulok felvételét (importálását). A CMake nyelvi parancsokat (vagy direktívákat) a CMake olvassa be a CMakeLists.txt fájlból . Ez a fájl azokat a forrásfájlokat és összeállítási beállításokat adja meg, amelyeket a CMake elhelyez a projekt összeállítási specifikációjában (például egy Make fájlban). Ezenkívül a .cmake előtaggal ellátott fájlok tartalmazhatnak a CMake által használt szkripteket [26] .

Parancs szintaxis

A parancsargumentumok szóközökkel vannak elválasztva, és kulcsszavakat tartalmazhatnak az argumentumcsoportok elkülönítéséhez. Például a parancsban

# Telepítési parancs telepítés ( TARGETS ... # TARGET CONFIGURATIONS ... # CONFIGURATIONS (Debug, Release...) RUNTIME DESTINATION ... ) # (Futtatható, MACOSX_BUNDLE, DLL) DESTINATION

a kulcsszavak TARGETS, CONFIGURATIONSés RUNTIME DESTINATION. Ebben az esetben TARGETSelválasztóként CONFIGURATIONSszolgálnak a "célok" és a "konfigurációk" között [27] .

Példák a célokat és azok függőségeit meghatározó CMake parancsokra [28] [29] [30] :

  • add_executable(...)- meghatározza a célt (a végrehajtható fájl, például .exe , a célplatformtól függ);
  • add_library(...)- meghatározza a célt (könyvtár, például .so vagy .dll );
  • target_link_libraries(...)— meghatározza a megadott cél függőségeit.

JSON támogatás

A CMake támogatja az adatértékek változókba való kinyerését JSON -karakterláncokból (a 3.19-es verzió óta) [31] .

Modulok és eszközök

A CMake sok " .cmake " modult és eszközt tartalmaz. Lehetővé teszik például a függőségek (beépített és külső, például FindXYZ modulok) keresését, a végrehajtható fájlok tesztelésére szolgáló eszközöket, a csomagolást ( a CPack modul és a cpack parancs ), valamint a külső projektekből származó függőségek kezelését (az ExternalProject ). modul ) [32] [ 33] :

  • ctest – a CMakeLists.txt fájlban megadott célok tesztelésére szolgál ;
  • ccmake és cmake-gui - beállítja és frissíti a cél build rendszerhez szánt konfigurációs változókat;
  • cpack – Segít a szoftverek csomagolásában és telepítésében.

CPack

A 2.4.2-es verziótól kezdődően [34] a CMake tartalmazza a CPack automatizált összeállítási rendszert a szoftvercsomagokhoz és a CMake modult a vele való interakcióhoz. A rendszer lehetővé teszi szoftvercsomagok készítését népszerű csomagkezelők ( DEB , RPM , DMG ), szoftvertelepítő ( NSIS for Microsoft Windows ) számára, valamint archívumok ( TGZ , TBZ2 , ZIP , önkicsomagoló TGZ ) létrehozását [35] .

Szoftverprojektek a CMake használatával

A CMake nagyon elterjedt a nyílt forráskódú projektek, valamint a kereskedelmi és akadémiai szoftverprojektek körében.

Nyílt forráskódú projektek

Tudományos kutatási projektek

Az ATLAS kísérletben használt szoftver a CMake segítségével készült. Maga a szoftver C/C++ és Python nyelven íródott [38] .

Egy francia kutatóintézet, az INRIA alkalmazta a CMake-et az orvosi kutatásban a SOFA [39] projektben .

Zárt forráskódú cégek és projektek

  • Netflix (filmek és sorozatok streaming szolgáltatása) [40] ;
  • Second Life (virtuális világ közösségi hálózati elemekkel) [41] .

Példa

Példa egy egyszerű Hello, World! » projekt a CMake-ben.

# Fájl - "CMakeLists.txt" cmake_minimum_required ( VERZIÓ 3.16 ) # Válassza ki a cmake minimálisan szükséges verzióját projekt ( my_project ) # Adjon nevet a projektnek add_executable ( # Hozzon létre egy célt (futtatható) ${ PROJECT_NAME } # Fájlnév main.cpp # Forráskód fájlok listája ) # Nincs szükség fejlécfájlok hozzáadására install ( # Adja meg a célt és a telepítési útvonalat CÉLKITŰZÉSEK ${ PROJECT_NAME } # Útvonal hozzáfűzve az előtaghoz RUNTIME DESTINATION bin # bin - bináris (a végrehajtható fájlok elérési útja) ) # Standard előtag UNIX rendszerekhez # "/usr/local" + "/bin" // fájl - "main.cpp" # include <iostream> int main () { std :: cout << "Hello, World!" << std :: endl ; return 0 ; }

Az összeállítás a következő parancsokkal történik a fájlokat tartalmazó könyvtárban:

$ cmake . # Hívás build fájlok generálásához $ cmake --build . # Összegyűjtjük a célt, a kimenet egy futtatható fájl $ cmake --install . # Ha szükséges, telepítse

Ezzel egyidejűleg a CMake nyelv egy külön eleméről és annak parancsairól is lehet súgó információkat kapni.

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

Lásd még

Jegyzetek

  1. A CMake 3.24.3 letölthető
  2. A cmake nyílt forráskódú projekt az Open Hubon: Nyelvek oldala – 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. A cmake nyílt forráskódú projekt az Open Hubon: Licencek oldala - 2006.
  10. https://cmake.org/licensing/
  11. A modern CMake átvétele Hogyan ismerjük fel és használjuk a modern CMake felületeket  ( PDF). Letöltve: 2022. április 4. Az eredetiből archiválva : 2022. január 20.
  12. FLOSS Weekly 111:  CMake . podcast. TWIT hálózat. . Letöltve: 2022. január 19. Az eredetiből archiválva : 2014. október 6..
  13. A CMake-  ről . cmake.org . Letöltve: 2022. március 15. Az eredetiből archiválva : 2022. március 14.
  14. A CMake-ről szóló fejezet fordítása a Nyílt forráskódú alkalmazások architektúrájából . rus-linux.net (2012. augusztus 28.). Letöltve: 2022. január 19. Az eredetiből archiválva : 2021. május 7..
  15. ↑ CMake fejezet A nyílt forráskódú alkalmazások architektúrájából  . aosabook.org (2012). Hozzáférés dátuma: 2022. január 19. Az eredetiből archiválva : 2022. április 7.
  16. 1 2 Alexander Neundorf. Miért vált a KDE projekt CMake-re - és hogyan  . lwn.net (2006. június 21.). Letöltve: 2022. január 19. Az eredetiből archiválva : 2021. november 20.
  17. ↑ CMake dokumentáció : IDE integrációs útmutató  . cmake.org . Letöltve: 2022. január 26. Az eredetiből archiválva : 2022. január 26..
  18. CMake dokumentáció: cmake-file-api(7  ) . cmake.org . Letöltve: 2022. január 26. Az eredetiből archiválva : 2022. január 26..
  19. ↑ CMake dokumentáció : IDE-k CMake integrációval . cmake.org . Letöltve: 2022. július 11.  
  20. CMake fordítói szolgáltatás észlelése  . scivision.dev (2020. november 15.). Letöltve: 2022. április 4. Az eredetiből archiválva : 2022. január 22.
  21. Támogatott fordítók  . CMake.org . Letöltve: 2022. április 4. Az eredetiből archiválva : 2022. február 21..
  22. CMake dokumentáció: cmake-toolchains(7  ) . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  23. Daniel Pfeifer. Hatékony CMake  (angol) (PDF). GitHub (2017. május 19.). Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  24. ↑ CMake dokumentáció : cmake-buildsystem(7) - Object Libraries  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  25. ↑ CMake dokumentáció : cél előfordítási fejlécek  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  26. CMake dokumentáció: cmake-language(7  ) . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. február 21..
  27. Andrej Szedilnik. Platformok közötti szoftverfejlesztés a CMake  segítségével . linuxjournal (2003. október 3.). Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  28. ↑ CMake dokumentáció : cmake-commands(7) - add_executable  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  29. ↑ CMake dokumentáció : cmake-commands(7) - add_library  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  30. ↑ CMake dokumentáció : cmake-commands(7) - target_link_libraries  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  31. ↑ CMake dokumentáció : CMake 3.19 Kiadási megjegyzések  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. április 29.
  32. CMake dokumentáció: cmake-modules(7  ) . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2021. december 9..
  33. ↑ CMake dokumentáció : cmake-modules(7) - ExternalProject  . cmake.org . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. február 21..
  34. CMake: Csomagolás CPack segítségével -  KitwarePublic . gitlab . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  35. CMake:CPackPackageGenerators -  KitwarePublic . gitlab . Letöltve: 2022. január 19. Az eredetiből archiválva : 2022. január 19.
  36. Blender wiki -  Blender építése . blender.org . Hozzáférés dátuma: 2022. január 19. Az eredetiből archiválva : 2022. január 24.
  37. ↑ A KDE elfogadja a CMake-et  . kitware.com . Letöltve: 2022. március 15. Az eredetiből archiválva : 2022. március 14.
  38. J. Elmsheuser, A. Krasznahorkay, E. Obreshkov, A. Undrus. Nagyszabású szoftverkészítés a CMake segítségével ATLAS-ban  ( PDF). CERN . Letöltve: 2022. január 19. Az eredetiből archiválva : 2021. november 10.
  39. ↑ A SOFA konvertálása CMake-be  . kitware.com . Letöltve: 2022. március 15. Az eredetiből archiválva : 2022. március 14.
  40. ↑ CMake, CTest és CDash a Netflixen  . kitware.com . Letöltve: 2022. március 15. Az eredetiből archiválva : 2022. március 14.
  41. A Second Life a CMake-et választja felépítési  rendszerének . kitware.com . Letöltve: 2022. március 15. Az eredetiből archiválva : 2022. március 14.

Linkek