Meson (software) - Meson (software)
Meson konfiguruje GStreamer projekt | |
Vývojáři | Jussi Pakkanen |
---|---|
První vydání | 2. března 2013 |
Stabilní uvolnění | 0.56.0 / 30. října 2020[1] |
Úložiště | |
Napsáno | Krajta |
Operační systém | Cross-platform |
Typ | Nástroje pro vývoj softwaru |
Licence | Licence Apache 2.0 |
webová stránka | mezonbuild |
Meson (/ˈmɛ.sɒn/)[2] je softwarový nástroj pro automatizace budovy (kompilace) softwaru. Celkovým cílem společnosti Meson je podpora produktivity programátora.[3] Meson je bezplatný open source software napsáno v Krajta, pod Licence Apache 2.0.[4]
Interoperabilita
Meson, který je napsán v Pythonu, nativně běží dál Unix podobné operační systémy, včetně Operační Systém Mac, stejně jako Microsoft Windows a na jiných operačních systémech.
Meson podporuje C, C ++, CUDA, D, Cíl-C, Fortran, Jáva, C#, Rez a Vala jazyky,[5] a má mechanismus pro zpracování závislostí zvaný Zalomení.
Meson podporuje Sbírka překladačů GNU, Zvonit, Microsoft Visual Studio a další.
Popis
Meson je podobný CMake při přípravě souborů pro jiný stavební nástroj, jako je ninja nebo náklad [6] v systému Linux, MSBuild ve Windows nebo Xcode na macOS (CMake vytváří soubory pro všechny včetně udělat a ninja na rozdíl od Cargo). Uživatel poté vyvolá back-endový systém sestavení. Protože jsou podporována pouze sestavení mimo strom (zdrojová složka), vyžaduje, aby uživatel vytvořil adresář sestavení pro tento back-endový systém sestavení a jeho výstupy. Základní rozdíl v použití spočívá v tom, že CMake je výchozí udělat jako backend místo ninja, ale cmake -G Ninja
chová se v tomto ohledu jako Meson.
Jazyk
Syntaxe souborů popisu Mesonových sestav (jazyk Meson) si vypůjčuje Krajta, ale není to Python: Je navržen tak, aby jej bylo možné znovu implementovat v jakémkoli jiném jazyce[7] - závislost na Pythonu je detail implementace.
Mesonský jazyk záměrně není Turing dokončen, a proto nemůže vyjádřit libovolný program.[7] Místo toho lze libovolné kroky sestavení nad rámec kompilace podporovaných jazyků představit jako vlastní cíle.
Mesonský jazyk je silně napsaný, takže integrované typy jako knihovna, spustitelný soubor, řetězec a jejich seznamy jsou nezaměnitelné.[8] Zejména na rozdíl od značky Make typ seznamu nerozděluje řetězce na mezery.[7] Mezery a další znaky v názvech souborů a argumentech programu jsou tedy zpracovány čistě.
Meson | CMake | Udělat | |
---|---|---|---|
Typy dat | Ano | Ne | Ne |
Seznam datových typů | Ano | řetězec oddělený středníkem | řetězec oddělený mezerami |
Globování souborů | Ne | Ano | Ano |
Rozšiřitelné pomocí vlastních funkcí | Ne | Ano | Ano |
Může číst výstup libovolných příkazů (v době konfigurace) | run_command | Ano | Ano |
Může spouštět libovolné příkazy v době sestavování jako recepty vlastních cílů | Ano | Ano | Ano |
Rychlost a správnost
Stejně jako u jiných typických sestavovacích systémů je správné přírůstkové sestavení nejdůležitější funkcí rychlosti (protože veškerý přírůstkový postup je zahozen, kdykoli je uživatel nucen provést čisté sestavení).
Na rozdíl od bare Make, samostatný krok konfigurace zajišťuje, že změny argumentů, proměnných prostředí a výstupu příkazu nebudou v následujících sestaveních částečně použity, což by vedlo k zastaralému sestavení.
Stejně jako Ninja, ani Meson nepodporuje globování zdrojových souborů.[7] Vyžadováním toho, aby všechny zdrojové soubory byly uvedeny v definičních souborech sestavení, jsou časová razítka definičního souboru sestavení dostatečná k určení, zda se změnila sada zdrojových souborů, čímž je zajištěno zjištění odstraněných zdrojových souborů. CMake podporuje globování, ale doporučuje se proti němu ze stejného důvodu.[9]
Meson používá ccache automaticky, pokud je nainstalován. Detekuje také změny tabulky symbolů z sdílené knihovny přeskočit opětovné propojení spustitelných souborů s knihovnou, pokud neexistují žádné ABI Změny. Předkompilované záhlaví jsou podporovány, ale vyžadují konfiguraci. Sestavení ladění jsou ve výchozím nastavení bez optimalizace.
funkce rychlosti | Meson | CMake | Udělat |
---|---|---|---|
Zakazuje zastaralá sestavení (částečné opětovné sestavení proti změně vstupu) | Ano (pokud nejsou chyby) | Pokud to není globování zdrojových souborů | Rekurzivní značka (idiomatický vzor) je v tomto ohledu porušen[10] |
Cíl, který spouští testy, závisí na testech, které se vytvářejí (např. test záleží na Všechno) | Ano | Ne, a add_dependencies (otestovat vše) je zakázáno, protože test cíl je vyhrazen.[11] | Triviální přidat |
Ccache | Automatický | Triviální přidat | Triviální přidat |
Distcc | Triviální přidat | Triviální přidat | Triviální přidat |
Tabulka symbolů vědoma opětovného propojení | Ano | Udělej si sám | Udělej si sám |
Předkompilované záhlaví | Volitelný | CMake ≥ 3,16[12][2] | Udělej si sám |
Funkce
Stanoveným cílem Mesonu je usnadnit moderní vývojové postupy. Meson jako takový ví, jak na to jednota se buduje, stavět s testovací pokrytí, optimalizace času spojení atd., aniž by k tomu musel programátor psát podporu.
Meson | CMake | Automatické nástroje | |
---|---|---|---|
Generovat a konfigurovat skript | Ne | Ne | udělat dist |
Nastavte správný instalační adresář knihovny na x86_64 Unix | Automatický | Není standardizováno | ./configure --libdir = / usr / lib64 |
Dílčí projekty
Jako CMake,Balíček CMake Meson primárně používá pkg-config najít závislosti, které jsou mimo projekt. To není řešení závislost peklo, protože úkolem uspokojení chybějících závislostí je na uživateli. Alternativně může být závislost internalizována jako a dílčí projekt - projekt Meson v jiném - buď obsažený, nebo jako odkaz.[13] To má tu nevýhodu, že přispíváme k softwarový nadýmání v případě běžných závislostí. Kompromis zvýhodněný Balírny Linux je použít podprojekt jako záložní pro externí závislost.[14]
Meson podporuje dílčí projekty Meson a CMake. Soubor sestavení Meson může také odkazovat na službu WrapDB.[13]
- Porovnání případů použití řešení závislostí v různých sestavovacích systémech
případ použití | Meson | CMake | Náklad |
---|---|---|---|
Hledání nainstalovaných závislostí | pkg-config | CMake modul, pkg-config | ? |
Automatické stahování závislostí | dílčí projekt | Externí projekt[15] | Závislost na nákladu |
Nalezení nainstalovaných závislostí, záložní stažení | pkg-config + dílčí projekt | CMake modul / pkg-config + ExternalProject | ? |
pkg-config generátor souborů | Ano | Ne | Ne |
Usnadněte použití jako závislost automatického stahování | Lze použít jako dílčí projekt Meson | Ne | S registrací na crates.io |
- Poznámky
- ^ CMake balíček CMake může použít buď Balíčky CMake nebo pkg-config, ale jak ukazuje tabulka, obě slouží k nalezení nainstalován závislosti.
Křížová kompilace
Křížová kompilace vyžaduje další konfiguraci, kterou Meson podporuje ve formě samostatné křížový pilník, který může být mimo projekt Meson.[16]
Osvojitelé
GNOME si dal za cíl přenést své projekty na Meson.[17] Ke konci roku 2017, GNOME Shell sám vyžaduje výlučně Meson poté, co opustil Autotools,[18] a centrální komponenty jako GTK +, Nepořádek-GTK, GLib a GStreamer lze postavit s Mesonem.[17]
Systemd spoléhá na Meson od upuštění Autotools ve verzi 234.[19]
Taky X.Org[20] a Mesa[21] byly přeneseny do Mesonu.
Domovská stránka Mesonu uvádí další projekty využívající Meson.[22]
Viz také
Reference
- ^ "Vydání - mesonbuild / meson". Citováno 30. října 2020 - přes GitHub.
- ^ A b „Vytváření sestavovacích systémů není sát (video linux.conf.au)“.
- ^ „Systém vysoké produktivity“.
Meson si klade za cíl optimalizovat produktivitu programátoru poskytováním jednoduché okamžité podpory pro moderní nástroje a postupy pro vývoj softwaru, jako jsou testy jednotek, zprávy o pokrytí, Valgrind, CCache a podobně.
- ^ "mesonbuild / meson: The Meson Build System". GitHub. Citováno 13. dubna 2016.
- ^ "Referenční příručka".
- ^ https://lwn.net/Articles/820836/
- ^ A b C d „Meson, často kladené otázky“.
- ^ "Meson Syntax".
- ^ "Příkaz CMake FILE".
Poznámka: Nedoporučujeme používat GLOB ke shromažďování seznamu zdrojových souborů ze zdrojového stromu. Pokud se žádný soubor CMakeLists.txt nezmění při přidání nebo odebrání zdroje, vygenerovaný systém sestavení nemůže vědět, kdy požádat CMake o regeneraci.
- ^ „Nerekurzivní, považováno za škodlivé“ (PDF).
Rekurzivní make je považován za škodlivý z velmi dobrých důvodů (Miller 1998); není možné přesně sledovat závislosti, když je systém sestavení sestaven ze samostatných komponent, které se navzájem vyvolávají.
- ^ „Make test nezávisí na make all“. Sledovač problémů s Kitware. 2016-06-23. Citováno 3. září 2020.
- ^ „Podpora CMake pro předkompilované hlavičky“. Citováno 13. března 2018.
- ^ A b "Manuální zábal systému závislostí".
- ^ „Závislosti Mesonu a třetích stran. Pouze jedna správná cesta“.
- ^ https://cmake.org/cmake/help/v3.15/module/ExternalProject.html
- ^ „Cross compilation“.
- ^ A b „Cíl GNOME: Moduly portů pro použití systému sestavení Meson“.
- ^ „GNOME 3.26 Beta Debuts: More Meson Porting, Wayland Action“.
- ^ "Zrušit podporu pro automatické nástroje".
- ^ „Podpora serveru Meson přistála na serveru X.Org“.
- ^ „Vývojáři společnosti Mesa se blíží upuštění od budování systému Autotools ve prospěch společnosti Meson“.
- ^ "Seznam projektů využívajících Meson".