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ő.
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] .
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] .
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.
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] :
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:
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] .
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] .
A CMake 3.6 óta előre lefordított fejlécfájlokat hozhat létre [25] .
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] .
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) DESTINATIONa 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] :
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] .
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] :
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] .
A CMake nagyon elterjedt a nyílt forráskódú projektek, valamint a kereskedelmi és akadémiai szoftverprojektek körében.
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 .
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ítseEzzel 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 installSzerelési automatizálási rendszerek | |
---|---|