Meson (mjukvara)

Meson
Utvecklare Jussi Pakkanen
Initial release 2 mars 2013 ; 10 år sedan ( 2013-03-02 )
Stabil frisättning
Edit this on Wikidata 1.0.0 / 23 december 2022 ; 2 månader sedan ( 23 december 2022 )
Förvar
Skrivet i Pytonorm
Operativ system Cross-plattform
Typ Verktyg för mjukvaruutveckling
Licens Apache-licens 2.0
Hemsida mesonbuild .com  Edit this on Wikidata

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 lådor .io

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.

Se även

externa länkar