CMake

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 12. října 2020; kontroly vyžadují 54 úprav .
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é.

Historie

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

Funkce

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

Vlastní struktura projektu

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.

Podpora pro různá vývojová prostředí

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

Podpora kompilátoru

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:

Proces montáže

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

Build Target Types

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

Předkompilované hlavičkové soubory

Od CMake 3.6 můžete vytvářet předkompilované hlavičkové soubory [25] .

Jazyk

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

Syntaxe příkazu

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ÍL

klíč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] :

  • add_executable(...)- definuje cíl (spustitelný soubor, například .exe , závisí na cílové platformě);
  • add_library(...)- definuje cíl (knihovnu, například .so nebo .dll );
  • target_link_libraries(...)— určuje závislosti zadaného cíle.

Podpora JSON

CMake podporuje extrahování datových hodnot do proměnných z řetězců JSON (od verze 3.19) [31] .

Moduly a nástroje

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

  • ctest - používá se k testování cílů uvedených v CMakeLists.txt ;
  • ccmake a cmake-gui - nastavuje a aktualizuje konfigurační proměnné určené pro cílový systém sestavení;
  • cpack - Pomáhá zabalit a nainstalovat software.

CPack

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

Softwarové projekty využívající CMake

CMake se velmi rozšířil mezi open source projekty, stejně jako mezi komerčními a akademickými softwarovými projekty.

Open source projekty

Projekty vědeckého výzkumu

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

Společnosti a projekty s uzavřeným zdrojem

Příklad

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 nainstalujte

Zá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 install

Viz také

Poznámky

  1. CMake 3.24.3 je k dispozici ke stažení
  2. Projekt cmake Open Source na Open Hub: Stránka jazyků - 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. Projekt cmake Open Source na Open Hub: Stránka licencí - 2006.
  10. https://cmake.org/licensing/
  11. Přijetí moderního CMake Jak rozpoznat a používat moderní rozhraní CMake  ( PDF). Získáno 4. dubna 2022. Archivováno z originálu dne 20. ledna 2022.
  12. FLOSS Weekly 111:  CMake . podcast. Síť TWIT. . Získáno 19. ledna 2022. Archivováno z originálu dne 6. října 2014.
  13. O CMake  . cmake.org . Získáno 15. března 2022. Archivováno z originálu dne 14. března 2022.
  14. Překlad kapitoly o CMake z The Architecture of Open Source Applications . rus-linux.net (28. srpna 2012). Získáno 19. ledna 2022. Archivováno z originálu dne 7. května 2021.
  15. ↑ CMake kapitola z The Architecture of Open Source Applications  . aosabook.org (2012). Datum přístupu: 19. ledna 2022. Archivováno z originálu 7. dubna 2022.
  16. 1 2 Alexander Neundorf. Proč projekt KDE přešel na CMake – a jak  . lwn.net (21. června 2006). Získáno 19. ledna 2022. Archivováno z originálu dne 20. listopadu 2021.
  17. ↑ Dokumentace CMake : Průvodce integrací IDE  . cmake.org . Získáno 26. ledna 2022. Archivováno z originálu dne 26. ledna 2022.
  18. Dokumentace CMake: cmake-file-api(7  ) . cmake.org . Získáno 26. ledna 2022. Archivováno z originálu dne 26. ledna 2022.
  19. ↑ Dokumentace CMake : IDE s integrací CMake . cmake.org . Staženo: 11. července 2022.  
  20. Detekce funkce kompilátoru  CMake . scivision.dev (15. listopadu 2020). Staženo 4. dubna 2022. Archivováno z originálu 22. ledna 2022.
  21. Podporované kompilátory  . CMake.org . Staženo 4. dubna 2022. Archivováno z originálu 21. února 2022.
  22. Dokumentace CMake: cmake-toolchains(7  ) . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  23. Daniel Pfeifer. Efektivní CMake  (anglicky) (PDF). GitHub (19. května 2017). Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  24. ↑ Dokumentace CMake : cmake-buildsystem(7) - Knihovny objektů  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  25. ↑ Dokumentace CMake : cílové hlavičky předkompilace  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  26. Dokumentace CMake: cmake-language(7  ) . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 21. února 2022.
  27. Andrey Sedilnik. Vývoj softwaru pro více platforem pomocí CMake  . linuxjournal (3. října 2003). Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  28. ↑ Dokumentace CMake : cmake-commands(7) - add_executable  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  29. ↑ Dokumentace CMake : cmake-commands(7) - add_library  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  30. ↑ Dokumentace CMake : cmake-commands(7) - target_link_libraries  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  31. ↑ Dokumentace CMake : Poznámky k verzi CMake 3.19  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 29. dubna 2022.
  32. Dokumentace CMake: cmake-modules(7  ) . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 9. prosince 2021.
  33. ↑ Dokumentace CMake : cmake-modules(7) - ExternalProject  . cmake.org . Získáno 19. ledna 2022. Archivováno z originálu dne 21. února 2022.
  34. CMake:Packaging With CPack -  KitwarePublic . gitlab . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  35. CMake:CPackPackageGenerators –  KitwarePublic . gitlab . Získáno 19. ledna 2022. Archivováno z originálu dne 19. ledna 2022.
  36. Blender wiki - Building  Blender . blender.org . Datum přístupu: 19. ledna 2022. Archivováno z originálu 24. ledna 2022.
  37. ↑ KDE přijímá CMake  . kitware.com . Získáno 15. března 2022. Archivováno z originálu dne 14. března 2022.
  38. J. Elmsheuser, A. Krasznahorkay, E. Obreshkov, A. Undrus. Rozsáhlá tvorba softwaru s CMake v ATLAS  ( PDF). CERN . Získáno 19. ledna 2022. Archivováno z originálu dne 10. listopadu 2021.
  39. ↑ Převod SOFA na CMake  . kitware.com . Získáno 15. března 2022. Archivováno z originálu dne 14. března 2022.
  40. ↑ CMake, CTest a CDash na Netflixu  . kitware.com . Získáno 15. března 2022. Archivováno z originálu dne 14. března 2022.
  41. Second Life volí CMake jako svůj  systém sestavení . kitware.com . Získáno 15. března 2022. Archivováno z originálu dne 14. března 2022.

Odkazy