Meson (mjukvara)
Utvecklare | Jussi Pakkanen |
---|---|
Initial release | 2 mars 2013 |
Stabil frisättning | |
Förvar | |
Skrivet i | Pytonorm |
Operativ system | Cross-plattform |
Typ | Verktyg för mjukvaruutveckling |
Licens | Apache-licens 2.0 |
Hemsida |
|
Meson ( / ˈ m ɛ . s ɒ n / ) är ett mjukvaruverktyg för att automatisera byggandet (kompileringen) av programvara. Det övergripande målet för Meson är att främja programmerarens produktivitet. Meson är gratis programvara med öppen källkod skriven i Python , under Apache License 2.0 .
Interoperabilitet
Meson är skriven i Python och körs på Unix -liknande operativsystem, inklusive macOS , såväl som Microsoft Windows och andra operativsystem.
Meson stöder språken C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust och Vala och har en mekanism för att hantera beroenden som kallas Wrap.
Meson stöder GNU Compiler Collection , Clang , Microsoft Visual C++ och andra kompilatorer, inklusive icke-traditionella kompilatorer som Emscripten och Cython . Projektet använder ninja som det primära backend-byggsystemet, men kan också använda Microsoft Visual Studio eller Xcode backends.
Språk
Syntaxen för Mesons byggbeskrivningsfiler (Meson-språket) lånar från Python , men är inte Python: Den är utformad så att den kan implementeras på nytt på vilket annat språk som helst; till exempel är muon en C-implementation och Meson++ är en C++-implementation – beroendet av Python är en implementeringsdetalj.
Meson-språket är avsiktligt inte Turing komplett , och kan därför inte uttrycka ett godtyckligt program. Istället kan godtyckliga byggsteg utöver kompilering av språk som stöds representeras som anpassade mål.
Meson-språket är starkt skrivet , så att inbyggda typer som bibliotek, körbar fil, sträng och listor därav, inte är utbytbara. I synnerhet, till skillnad från Make, delar listtypen inte strängar på blanksteg. Således hanteras blanksteg och andra tecken i filnamn och programargument rent.
Meson | CMake | Göra | |
---|---|---|---|
Datatyper | Ja | Nej | Nej |
Lista datatyp | Ja | semikolonavgränsad sträng | blankstegsavgränsad sträng |
Ordbok datatyp | sedan 0.47.0 | Nej | Nej |
Fil globbing | Nej | Ja | Ja |
Kan utökas via anpassade funktioner | Nej | Ja | Ja |
Kan läsa utdata från godtyckliga kommandon (vid konfigureringstidpunkten) | Kör kommando | Ja | Ja |
Kan köra godtyckliga kommandon vid byggtid som recept på anpassade mål | Ja | Ja | Ja |
Snabbhet och korrekthet
Som med alla typiska byggsystem är korrekta inkrementella byggen den viktigaste hastighetsfunktionen (eftersom alla inkrementella framsteg kasseras när användaren tvingas göra en ren build).
Till skillnad från bare Make, säkerställer det separata konfigureringssteget att ändringar av argument, miljövariabler och kommandoutdata inte tillämpas delvis i efterföljande konstruktioner, vilket skulle leda till en inaktuell konstruktion.
Precis som Ninja stöder inte Meson globbing av källfiler. Genom att kräva att alla källfiler ska listas i byggdefinitionsfilerna är tidsstämplarna för byggdefinitionsfilen tillräckliga för att avgöra om uppsättningen källfiler har ändrats, vilket säkerställer att borttagna källfiler upptäcks. CMake stöder globbing, men rekommenderar det av samma anledning.
Meson använder ccache automatiskt om den är installerad. Den upptäcker också ändringar i symboltabeller för delade bibliotek för att hoppa över återlänkning av körbara filer mot biblioteket när det inte finns några ABI- ändringar. Förkompilerade rubriker stöds, men kräver konfiguration. Felsökningsbyggen är som standard utan optimering.
hastighetsfunktion | Meson | CMake | Göra |
---|---|---|---|
Förbjuder inaktuella konstruktioner (partiell ombyggnad mot indataändring) | Ja (om det inte finns buggar) | Om inte globbing källfiler | Recursive Make (ett idiomatiskt mönster) bryts i detta avseende |
Målet som kör tester beror på testerna som byggs (t.ex. test beror på alla ) |
Ja | Nej, och add_dependencies(testa alla) är förbjudet, eftersom testmålet är reserverat. |
Trivialt att lägga till |
Ccache | Automatisk | Trivialt att lägga till | Trivialt att lägga till |
Distcc | Trivialt att lägga till | Trivialt att lägga till | Trivialt att lägga till |
Symboltabell medveten återlänkning | Ja | Gör det själv | Gör det själv |
Förkompilerade rubriker | Frivillig | CMake ≥ 3,16 | Gör det själv |
Funktioner
Ett uttalat mål för Meson är att underlätta moderna utvecklingsmetoder. Som sådan vet Meson hur man gör enhetsbyggen , bygger med testtäckning , länktidsoptimering etc utan att programmeraren behöver skriva stöd för detta.
Meson | CMake | Autoverktyg | |
---|---|---|---|
Skapa ett konfigureringsskript
|
Nej | Nej |
göra dist
|
Ställ in korrekt biblioteksinstallationskatalog på x86_64 Unix | Automatisk | Inte standardiserad |
./configure --libdir=/usr/lib64
|
Delprojekt
Meson kan automatiskt hitta och använda externa beroenden via pkg-config , CMake och projektspecifika uppslagningar, men detta hittar bara installerade beroenden, vilket Meson inte kan göra något åt. Alternativt, eller som en reserv, kan ett beroende tillhandahållas som ett delprojekt – ett Meson-projekt i ett annat, antingen inneslutet eller som en nedladdningslänk, eventuellt med patchar. Detta låter Meson lösa beroendehelvetet för att underlätta för tillfälliga användare som vill kompilera projektet, men kan bidra till mjukvaruuppsvällning om ett vanligt installerat beroende kunde ha använts istället. Läget som favoriseras av Linux-paketerare är därför reserv.
Meson stöder Meson- och CMake-delprojekt. En Meson-byggfil kan också referera till WrapDB-tjänsten.
- Jämförelse av användningsfall för beroendeupplösning i olika byggsystem
användningsfall | Meson | CMake | Frakt |
---|---|---|---|
Hitta installerade beroenden | pkg-config , CMake-paket | CMake-modul, pkg-config | ? |
Laddar ned beroenden automatiskt | delprojekt | Hämta innehåll | Lastberoende |
Hitta installerade beroenden, med reservnedladdning | pkg-config + underprojekt | CMake module/pkg-config + FetchContent
|
? |
pkg-config filgenerator | Ja | Nej | Nej |
Underlätta användningen som ett automatiskt nedladdningsbart beroende | Kan användas som ett Meson-delprojekt | Nej | Med registrering till |
Korssammanställning
Korskompilering kräver extra konfiguration, vilket Meson stöder i form av en separat korsfil , som kan vara extern till Meson-projektet.
Adoptanter
GNOME har satt som mål att porta sina projekt till Meson. I slutet av 2017 GNOME Shell sig exklusivt Meson efter att ha övergett Autotools, och centrala komponenter som GTK+ , Clutter-GTK , GLib och GStreamer kan byggas med Meson.
Många freedesktop.org- projekt har bytt till Meson. Systemd förlitar sig på Meson sedan Autotools släpptes i version 234, och även X.Org och Mesa portades till Meson.
Mesons stöd för Fortran och Cython förbättrades för att hjälpa olika vetenskapliga projekt att byta från setuptools till Meson, till exempel SciPy . Meson kan också användas som en PEP517-backend för att bygga Python- hjul , via meson-python- paketet.
Andra anmärkningsvärda projekt som använder Meson inkluderar QEMU och Libvirt ; Mesons hemsida listar ytterligare projekt som använder Meson.