A CMake egy ingyenes, platform-független szoftverfejlesztő eszköz, amellyel a fordítótól független utasítások segítségével készíthetünk alkalmazásokat. Automatizálni tudja a tesztelést, a csomagolást és a telepítést is. Számos platformon fut, és számos programozási nyelvet támogat.

Meta-építő eszközként a CMake konfigurálja a natívA számítástechnikában a natív szoftverek vagy adatformátumok olyanok, amelyeket egy adott operációs rendszeren való futtatásra terveztek. Technikai értelemben a natív kód kifejezetten egy adott processzorhoz írt kód. build-eszközöket,A szoftverösszeállítás (software build) az a folyamat, amelynek során a forráskódfájlokat önálló szoftvertermék(ek)ké alakítják, amelyek ennek eredményeként számítógépen futtathatók. amelyek viszont a kódbázist építik.A szoftverfejlesztésben a 'kódbázis (codebase) egy adott szoftverrendszer, alkalmazás vagy szoftverkomponens felépítéséhez használt forráskódok gyűjteménye. A CMake a CMake-specifikus konfigurációs fájlok alapján konfigurációs fájlokat generál más építőeszközök számára.A konfigurációs fájl-okat számítógépes programok, alkalmazások vagy operációs rendszerek paramétereinek kezdeti beállításaira használják. A többi eszköz a közvetlenebb építésért felelős; a generált fájlok felhasználásával. A CMake-specifikus konfigurációs fájlok egyetlen készletével egy kódbázis több platform natív építőeszközeivel is építhető.

A CMake által támogatott fontosabb natív építőeszközök a következők: Make, Qt Creator, Ninja, Android Studio, Xcode és Visual Studio.

A CMake szabad és nyílt forráskódú szoftver, amely a BSD-3 klauzula licenc alatt áll.

Története A kezdeti fejlesztés 1999-ben kezdődött a Kitware-nél a United States National Library of Medicine finanszírozásával a Visible Human ProjectA Visible Human Project az emberi testről készült keresztmetszeti fényképek részletes adatkészletének létrehozására tett erőfeszítés, az anatómiai vizualizációs alkalmazások megkönnyítése érdekében. részeként. A CMake 2000-ben jelent meg először.

A CMake-et az Insight Segmentation and Registration Toolkit (ITKAz ITK (Insight Segmentation and Registration Toolkit) egy többplatformos, nyílt forráskódú alkalmazásfejlesztő keretrendszer, amelyet széles körben használnak képszegmentáló és képregisztrációs programok fejlesztésére.) több platformra történő építésének támogatására fejlesztették ki. A kitűzött célok között szerepelt a korabeli eszközök, például az autoconf és a libtool gyengeségeinek kezelése az erősségek megtartása mellett, valamint az akkori legmodernebb építési technológiához való igazodás: konfigurációs szkriptek és Make fájlok Unix platformokon, valamint Visual Studio projektfájlok Windowson.

A CMake-et több kortárs eszköz is inspirálta. A pcmaker – amelyet Ken Martin és mások fejlesztettek ki a Visualization Toolkit (VTK) építésének támogatására – a Unix Make fájlokat NMake fájlokká alakította a Windowson történő építéshez. A gmake támogatta a Unix és Windows fordítókat, de a tervezése olyan problémákhoz vezetett, amelyeket nehéz volt megoldani. Mindkét eszköz működő példája volt a Unixot és a Windowst egyaránt támogató build eszköznek, de egy komoly hiba jellemezte őket: a Windows-fejlesztők számára a parancssor használatát követelték meg, annak ellenére, hogy sokan inkább integrált fejlesztőkörnyezetet (IDE), például a Visual Studiót használják.

A CMake célja az volt, hogy hasonló keresztplatformos támogatást nyújtson, de jobban kielégítse az egyes platformok fejlesztőinek preferenciáit.

Az első verzió tervezési céljai közé tartoztak: Csak a gazdagép C++ fordítójától függ; nincs szükség más harmadik féltől származó eszközökre vagy könyvtárakra Visual Studio projektfájlok (valamint Unix-fájlok) generálása Támogassa az építési célokat: program, statikus könyvtár, megosztott könyvtár Futtasson build-idejű kódgenerátorokat Támogassa a külön könyvtárfákat a forrás- és a build-fájlokhoz Támogassa a gazdaszámítógép képességeinek önvizsgálatát A C/C++ fejlécfájlok automatikus függőségi vizsgálatának támogatása Minden funkciónak következetesen és egyformán jól kell működnie minden támogatott platformon

Különböző okokból a CMake fejlesztői úgy döntöttek, hogy a Tcl – az akkoriban népszerű építési nyelv – helyett egy szkriptnyelv kifejlesztését választják a CMake számára. A Tcl használata egy olyan függőséget jelentett volna a gépen, amely ellentétes a céllal, hogy a fordítóprogramon kívül ne legyenek függőségek. Továbbá a Tcl a kezdeti fejlesztés idején nem volt jól támogatott a Windows és néhány Unix rendszeren.

A későbbi fejlesztéseket és javításokat a CMake beépítése a fejlesztők saját rendszereibe, beleértve a VXL projektet,A VXL, a Vision-something-Library a nyílt forráskódú C++ könyvtárak nagy gyűjteménye a számítógépes megjelenítéshez. a Brad King által hozzáadott CABLE funkciókat, és a GE Corporate R&D-t a DART támogatására.A GE Aerospace Research a GE Aerospace kutatási és fejlesztési részlege. További funkciókat hoztak létre, amikor a VTK áttért a CMake-re a build környezet és a ParaView támogatásához.

A 3.0-s verzió 2014 júniusában jelent meg. A „Modern CMake” kezdetének nevezték. A szakértők most azt tanácsolják, hogy kerüljük a változókat a célok és a tulajdonságok javára. A CMake 2 alapját képező add_compile_options, include_directories, link_directories, link_libraries parancsokat mostantól célspecifikus parancsokkal kell helyettesíteni.

Név Brad King, a CMake fejlesztője azt nyilatkozta, hogy „a 'C' a CMake-ben a »cross-platform«-ot jelenti”.https://public.kitware.com/Bug/view.php?id=14012#c32631

Jellemzők Generátorok Minden egyes natív építőeszköz támogatása külön generatorként van megadva. A CMake alapértelmezés szerint egy adott generátort használ a gazdakörnyezethez. Alternatívaként a generátor kiválasztható a parancssori -G opcióval. Például a -G Unix Makefiles build szkripteket hoz létre a make számára.

A CMake nem támogatja az egyéni generátorokat a CMake implementáció módosítása nélkül. Ennek ellenére a CMake forráskódja módosítható, hogy tartalmazzon egy egyéni generátort.

Build targets A CMake támogatja a futtatható fájlok, könyvtárak (pl. libxyz, xyz.dll stb.), objektumfájl könyvtárak és álcélok (pseudo-targets, beleértve az aliasokat is) építését. A CMake képes olyan objektumfájlokat előállítani, amelyeket a végrehajtható binárisok/könyvtárak linkelhetnek, elkerülve a dinamikus (futásidejű) linkelést, és helyette statikus (fordításidejű) linkelést használva. Ez lehetővé teszi a különböző optimalizációk rugalmas konfigurálását.

A cél (target) generálása a cél tulajdonságain keresztül konfigurálható. A régebbi verziókban ez a CMAKE_-prefixált globális változókon keresztül történt, de ez a megközelítés elavult.

Hierarchikus konfiguráció A CMake konfigurációs fájlokat a forráskód hierarchikus felépítése szerint lehet strukturálni; ez a forrásfa. A gyökér (root) forráskönyvtárban található CMakeLists.txt a konfiguráció gyökereként szolgál. Ez tartalmazhat alkönyvtárakat, amelyek mindegyike tartalmaz egy CMakeLists.txt-t. Ennek megismétlése a konfiguráció hierarchikus szerkezetét eredményezi, amely követi a forráskód szerkezetét.

Különálló építési fa A CMake képes a generált fájlokat (mind a CMake, mind a natív építőeszközök által) a forrásfától elkülönített könyvtárfában elhelyezni.

Ez lehetővé teszi a többszörös építést ugyanabból a forrásfából, mivel mindegyiknek különálló, nem átfedő fájlrendszeri helye van. Ez kihasználható különböző vagy akár inkompatibilis konfigurációk, például különböző platformok számára történő létrehozására.

Ez egyszerűsíti a fájlkezelést is, mivel lehetővé teszi a generált fájlok eltávolítását egyetlen könyvtárfa törlésével, ahelyett, hogy a forrásfában több fájlt és könyvtárat távolítana el. Ez általában megakadályozza a forrásfájlok véletlen törlését vagy a generált fájlok véletlen hozzáadását a verziókezelés során.

Függőségkezelés A CMake biztosítja, hogy a downstream komponensek újraépüljenek,A szoftverfejlesztésben a downstream a forráskódként terjesztett szoftver eredeti szerzőitől vagy karbantartóitól való távolodásra utal, és a javítás minősítése. amikor a forrásai megváltoznak vagy épülnek.

Flexibilis projektstruktúra A CMake képes rendszerszintű és felhasználó által meghatározott futtatható állományok, fájlok és könyvtárak keresésére. Ezeket a helyeket egy gyorsítótárban tárolja, amelyek aztán testreszabhatók a cél build fájlok generálása előtt. A cache szerkeszthető egy grafikus szerkesztővel, amely a CMake-kel együtt kerül szállításra.

A bonyolult könyvtárhierarchiákat és a több könyvtárra támaszkodó alkalmazásokat a CMake jól támogatja. Például képes befogadni egy olyan projektet, amely több eszközkészletet (toolkit) vagy könyvtárat tartalmaz, amelyek mindegyike több könyvtárral rendelkezik. Ezen kívül a CMake képes olyan projektekkel is dolgozni, amelyeknél a végrehajtható fájlok létrehozása szükséges a végső alkalmazáshoz lefordítandó kód generálása előtt. Nyílt forráskódú, bővíthető felépítése lehetővé teszi, hogy a CMake-et szükség szerint hozzá lehessen igazítani az adott projektekhez.

IDE konfigurációs támogatás A CMake képes projektfájlokat generálni több népszerű IDE-hez, például a Microsoft Visual Studio, az Xcode és az Eclipse CDT számára. Emellett képes build scripteket készíteni az MSBuild vagy NMake számára Windowson; a Unix Make számára Unix-szerű platformokon, mint például Linux, macOS és Cygwin; és a Ninja számára Windowson és Unix-szerű platformokon egyaránt.

A fordítói funkciók felismerése A CMake lehetővé teszi azoknak a tulajdonságoknak a megadását, amelyeket a fordítónak támogatnia kell ahhoz, hogy a célprogram vagy könyvtár lefordításra kerüljön.

Compiler támogatás A CMake számos fordítóprogramot támogat, többek között a következőket: Apple Clang, Clang, GNU GCC, MSVC, Oracle Developer Studio és Intel C++ Compiler.

Csomagkezelés A CMake képes csomagokat feldolgozni és előállítani is. A CMake funkciókat biztosít a csomagok távoli szerverről való lehívására, amelyeket a build folyamat részeként lehet használni. A CPack segítségével a fájlok csomagolhatók egy archív fájlba a célplatform által támogatott csomagkezelő vagy telepítő számára. A CMake függvényeket biztosít csomagok távoli szerverről történő letöltéséhez, amelyek felhasználhatók a build folyamat részeként, vagy korábban telepített cmake csomagok csatolására.

GUI A Cmake futtatható egy ncurses programmal, mint a ccmake, amely a projektek konfigurálására használható parancssori felületen keresztül.

Előfordított fejlécek A 3.6-os verzió óta lehetőség van előre lefordított fejlécek generálására a CMake segítségével. A 3.28-as verziótól kezdve a CMake modulok fordítására is képes. Kísérleti támogatás van a fejlécegységekhez is.

JSON strings A CMake támogatja a JSON-adat karakterláncokból történő értékek kivonását a változókba (a 3.19-es verzió óta).

Nyelv A CMake tartalmaz egy értelmezőt egy viszonylag egyszerű, egyéni, imperatív szkriptnyelvhez, amely támogatja a változókat, a karakterlánc-kezelést, a tömböket, a függvény- és makródeklarációt, valamint a modulok felvételét (importálását).

Az értelmező a CMake nyelvi parancsokat a CMakeLists.txt nevű fájlokból olvassa be, amelyek megadják a forrásfájlokat és az építési beállításokat. A CMake ezeket az információkat használja a natív eszközkonfigurációs fájlok létrehozásához. Ezenkívül .cmake végződésű fájlok további szkriptek tárolására is használhatók.

Parancs szintaxis A CMake nyelvi parancsok formátuma a következő: name(argument ...)

Az argumentumok szóközzel vannak elválasztva, és tartalmazhatnak kulcsszavakat az argumentumcsoportok elválasztására. Például a következő parancsban a COMPILE_FLAGS kulcsszó a forrásfájlok listáját választja el a fordítói flagektől. set_source_file_properties(filename ... COMPILE_FLAGS compile_flag ...)

Megvalósítás A CMake szkriptnyelv Yacc és Lex generátorokon keresztül valósul meg.

A CMake, CPack és CTest futtatható programok C++ nyelven íródtak.