CMake | |
---|---|
Typ | Vytvářejte automatizaci , bezplatný a open source software a nástroje |
Autor | Kitware Inc. [d] |
Vývojář | Kitware Inc. [d] , Alexander Neundorf [d] , Ken Martin [d] , Andrey Sedilnik [d] , William Hoffman [d] a Brad King [d] |
Zapsáno v | C++ a C [2] |
Rozhraní | Qt [3] [4] [5] |
Operační systém | Operační systém podobný Unixu [6] a Microsoft Windows [6] |
Jazyky rozhraní | Angličtina |
První vydání | 2000 |
Hardwarová platforma | multiplatformní [7] |
Nejnovější verze |
|
Stát | aktivní |
Licence | upravená licence BSD [d] [8][9][10] |
webová stránka | cmake.org _ |
Mediální soubory na Wikimedia Commons |
CMake ( MFA [ ˈ s i ː m e ɪ k ]; z angl. C ross-platform Make - “ Cross- platform Make” [11] ) je multiplatformní nástroj , který má schopnost automatizovat sestavování softwaru z zdrojový kód . CMake sám přímo nevytváří, ale pouze generuje soubory sestavení z předem napsaného souboru skriptu " CMakeLists.txt " a poskytuje jednoduché, jednotné rozhraní pro správu. Kromě toho je CMake schopen automatizovat proces instalace a balení .
Je považován za alternativu k systému Autotools na bázi Perlu a M4 běžnému v komunitě GNU , který vyžaduje určité dovednosti pro praktické použití a existující verze jsou v některých případech vzájemně nekompatibilní.
Ve srovnání s alternativou Autotools představenou v roce 2008 jsou SCons založené na Pythonu rychlejší, protože jsou napsány v C a používají extrémně jednoduchý jazyk maker , ale SCons jsou vysoce rozšiřitelné.
Vývoj CMake začal v roce 1999 v reakci na potřebu multiplatformního sestavení systému pro ITK [12] . Projekt financovaný americkou National Library of Medicine jako součást „ Visible Human Project “. Vývojovým úkolem byla pověřena malá společnost Kitware . Byl ovlivněn dřívějším systémem zvaným „pcmaker“ vytvořeným Kenem Martinem a dalšími na podporu Visualization Toolkit (VTK) [13] .
V té době bylo běžné používat konfigurační skripty a vytvářet soubory pro vytváření softwarových projektů na platformách Unix a soubory projektů Visual Studio na Windows . Tento přístup k vývoji způsobil velké nepohodlí, protože například přidání obyčejného souboru zdrojového kódu do projektu vedlo k velkým potížím, protože to muselo být provedeno pro každou platformu zvlášť a zcela odlišnými způsoby. Je zřejmé, že vývojáři chtěli mít jednotný systém sestavení, který by nebyl časově náročný a měl všechny výhody stávajících systémů sestavení, ale bez jejich nevýhod [14] [15] .
Klíčovou vlastností je možnost (volitelně) umístit výstup kompilátoru (jako jsou objektové soubory) mimo zdrojový strom . To umožňuje více variant sestavení ze stejného zdrojového kódu a také křížovou kompilaci . Tento přístup oddělení zdrojových souborů a souborů sestavení zajišťuje, že odstraněním adresáře sestavení neodstraníte zdrojový kód. Samotní uživatelé však nejsou chráněni před náhodným smazáním zdrojového adresáře [16] .
CMake může najít systémové a uživatelské adresáře pro spustitelné soubory, konfigurační soubory a knihovny. Tato umístění jsou uložena v mezipaměti , kterou lze nakonfigurovat před vygenerováním souborů cílového sestavení. Mezipaměť CMake lze upravovat pomocí grafického editoru, který je součástí CMake, nebo ručně prostřednictvím příkazového řádku pomocí příkazů CMake.
CMake také dobře podporuje komplexní hierarchie projektových adresářů navržené pro různé konfigurace, vytváření s různými knihovnami a nástroji. CMake v podstatě poskytuje možnost vytvářet podprojekty, které jsou sestaveny před vytvořením hlavního projektu, což vám umožňuje vytvářet řetězce závislostí, které jsou sestaveny ve správném pořadí potřebném pro vývojáře.
CMake může generovat soubory projektu pro několik populárních IDE , jako je Microsoft Visual Studio , Xcode a Eclipse CDT .
Může také vytvářet skripty sestavení pro:
Pro zjednodušení zavádění podpory CMake do nových IDE se doporučuje použít přednastavené soubory " CMakePresets.json " [17] , pro pohodlnější konfiguraci procesu sestavení, a také " File API " [18] , které obsahuje všechny informace potřebné pro IDE.
Následující IDE nativně podporují CMake [19] :
CMake umožňuje definovat vlastnosti, které musí kompilátor podporovat, aby mohl zkompilovat cílový program nebo knihovnu [20] .
CMake udržuje rozsáhlý seznam kompilátorů [21] , který zahrnuje:
Vytvoření programu nebo knihovny pomocí CMake je dvoukrokový proces. Nejprve se vytvoří (vygenerují) standardní soubory sestavení z konfiguračních souborů ( CMakeLists.txt ), které jsou napsány v jazyce CMake. Poté se nástroje pro sestavení systému (Make, Ninja atd.) používají ke skutečnému sestavování programů [16] [22] .
Soubory sestavení se konfigurují v závislosti na použitém generátoru (například generátor "Unix Makefiles" je pro Makefiles). Pokročilí uživatelé mohou vytvořit a zahrnout své vlastní generátory souborů Make pro podporu nových kompilátorů a operačních systémů. Vygenerované soubory jsou obvykle umístěny (pomocí příznaku CMake) v externím adresáři mimo zdrojové soubory, například v adresáři " build ".
Každý projekt po sestavení obsahuje v podadresářích " CMakeCache.txt " a adresář souborů Make, což pomáhá vyhnout se nebo urychlit krok "regenerace" po restartu sestavení [23] .
V závislosti na konfiguraci CMakeLists.txt a zvoleném cíli mohou soubory sestavení vytvořit:
CMake může vytvářet objektové soubory, které lze propojit se spustitelnými binárními soubory/knihovnami tím, že se vyhne dynamickému (runtime) propojení a místo toho použije statické (doba kompilace) propojení. To poskytuje flexibilitu při nastavování různých optimalizací (závislosti sestavení lze určit automaticky) [24] .
Od CMake 3.6 můžete vytvářet předkompilované hlavičkové soubory [25] .
CMake má relativně jednoduchý , interpretovaný imperativní skriptovací jazyk . Podporuje proměnné , metody manipulace s řetězci , pole , deklarace funkcí a maker , zahrnutí modulů (import). Jazykové příkazy (nebo direktivy) CMake čte CMake ze souboru CMakeLists.txt . Tento soubor určuje zdrojové soubory a možnosti sestavení, které CMake umístí do specifikace sestavení projektu (například do souboru Make). Kromě toho mohou soubory s předponou .cmake obsahovat skripty používané CMake [26] .
Argumenty příkazu jsou odděleny mezerami a mohou obsahovat klíčová slova k oddělení skupin argumentů. Například v příkazu
# Instalační příkaz install ( CÍLE ... # KONFIGURACE CÍLŮ ... # KONFIGURACE (Ladění, vydání…) CÍL BĚHU BĚHU ... ) # (Spustitelný soubor, MACOSX_BUNDLE , DLL) CÍLklíčová slova jsou TARGETS, CONFIGURATIONSa RUNTIME DESTINATION. V tomto případě TARGETSslouží CONFIGURATIONSjako oddělovače mezi „cíly“ a „konfiguracemi“ [27] .
Příklady příkazů CMake, které definují cíle a jejich závislosti [28] [29] [30] :
CMake podporuje extrahování datových hodnot do proměnných z řetězců JSON (od verze 3.19) [31] .
CMake přichází se spoustou modulů a nástrojů " .cmake ". Usnadňují provádění věcí, jako je vyhledávání závislostí (vestavěných i externích, jako jsou moduly FindXYZ ), nástroje pro testování spustitelných souborů, balení ( modul CPack a příkaz cpack ) a správa závislostí z externích projektů ( ExternalProject modul ) [32] [ 33] :
Počínaje verzí 2.4.2 [34] obsahuje CMake systém automatizovaného sestavování softwarových balíků CPack a modul CMake pro interakci s ním. Systém umožňuje vytvářet softwarové balíčky pro oblíbené správce balíčků ( DEB , RPM , DMG ), instalátor softwaru ( NSIS pro Microsoft Windows ) a také sestavovat archivy ( TGZ , TBZ2 , ZIP , samorozbalovací TGZ ) [35] .
CMake se velmi rozšířil mezi open source projekty, stejně jako mezi komerčními a akademickými softwarovými projekty.
Software použitý v experimentu ATLAS je vytvořen pomocí CMake. Samotný software je napsán v C/C++ a Pythonu [38] .
Výzkumný ústav ve Francii, INRIA , použil CMake na lékařský výzkum v projektu SOFA [39] .
Příklad jednoduchého Hello, World! » projekt v CMake.
# Soubor - "CMakeLists.txt" cmake_minimum_required ( VERZE 3.16 ) # Vyberte minimální požadovanou verzi cmake project ( my_project ) # Pojmenujte projekt add_executable ( # Vytvořit cíl (spustitelný soubor) ${ PROJECT_NAME } # Název souboru main.cpp # Seznam souborů zdrojového kódu ) # Není třeba přidávat hlavičkové soubory install ( # Zadejte cíl a instalační cestu CÍLE ${ PROJECT_NAME } # Cesta připojena k prefixu RUNTIME DESTINATION bin # bin - binární (cesta ke spustitelným souborům) ) # Standardní předpona pro systémy UNIX # "/usr/local" + "/bin" // soubor - "main.cpp" # include <iostream> int main () { std :: cout << "Ahoj světe!" << std :: endl ; návrat 0 ; }Sestavení se provádí pomocí následujících příkazů v adresáři se soubory:
$ cmake . # Volání pro generování souborů sestavení $ cmake --build . # Shromáždíme cíl, výstupem je spustitelný soubor $ cmake --install . # V případě potřeby nainstalujteZároveň je možné získat pomocné informace o samostatném prvku jazyka CMake a jeho příkazech.
$ cmake --help $ cmake --help-command-list $ cmake --help-command installMontážní automatizační systémy | |
---|---|