Meson (monteringssystem)

Meson

Byggprocessen för dav1d (codec-decoder från VideoLAN-projektet) med Meson
Sorts gratis och öppen källkodsprogramvara och verktyg för automatisering av byggnader [d]
Utvecklaren Jussi Pakkanen [d] [1]
Skrivet i Python [2]
Operativ system Unix-liknande operativsystem [3] och Microsoft Windows
Gränssnittsspråk engelsk
Första upplagan 2 mars 2012
Hårdvaruplattform plattformsoberoende [3]
senaste versionen
stat aktiva
Licens Apache License 2.0 [5] [1]
Hemsida mesonbuild.com
 Mediafiler på Wikimedia Commons

Meson ( MFA [ ˈ m i ː z ɒ n ]; från  engelska  -  " meson " ) är ett plattformskonsolverktyg som automatiserar processen att bygga programvara från källkod . Meson är öppen källkod och licensieras under Apache -licensen . Huvudidén med Meson är att bygga så snabbt som möjligt och inte spendera en enda droppe tid på att felsöka och testa , samt att vänta på att kompileringsprocessen ska starta . Verktyget har också ett längre, fullständigt namn - "The Meson build system" (Meson Assembly System). Men trots att Meson officiellt är positionerat som ett byggsystem, är det faktiskt inte det, eftersom det i princip använder ett annat verktyg - Ninja -byggsystemet och ett antal andra verktyg [6] [7] .

Historik

Skapande

Den första versionen av Meson dök upp under jullovet 2012 och utvecklades av den finske fysikern - programmeraren Jussi Pakkanen. Utvecklaren var uppgiven av det tillstånd där monteringsautomatiseringssystemen anlände vid den tiden. Många han ogillade eftersom de var för långsamma, vissa var för svåra att omsätta i praktiken och andra hade för komplicerad och oklar syntax . Efter att inte ha hittat det byggsystem han ville ha, bestämde sig Jussi för att tillbringa sin lediga tid denna helg och skapa sitt eget byggsystem som skulle passa hans behov [8] [9] .

Etymologi

Namnet på verktyget valdes med hänsyn till det faktum att det inte bör sammanfalla med namnet på något paket från Debians systempakethanterares databas eller med något projekt i SourceForge- databasen . Eftersom Jussi är en fysiker-programmerare, bestämde han sig vid något tillfälle för att använda namnet på elementarpartikeln - Gluon (eng. Gluon, från ordet lim - lim), vilket antyder att "gluoner är elementarpartiklar som håller ihop protoner och neutroner, ungefär som byggsystemets jobb är att ta bitar av källkod och en kompilator och sedan länka ihop dem." Men tyvärr var detta namn redan tagit, sedan, efter att ha sorterat igenom flera återstående subatomära partiklar , fick han reda på att namnet på partikelmesonen visade sig vara fritt [10] .

Funktioner

Mesons uttalade mål är att främja moderna utvecklingsmetoder. Som att använda metoden “ single assembly ”, montering med kodtäckning , LTO-optimering ( länktidsoptimering ) etc. Utan att programmeraren behöver skriva stöd för detta.

Portabilitet

Meson är skrivet i Python och körs inbyggt på Unix-liknande operativsystem , inklusive macOS , såväl som Microsoft Windows och ett antal andra operativsystem.

Meson stöder C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust , Vala [11] och har en beroendehanteringsmekanism som kallas "Wrap" [12] .

Meson stöder GNU Compiler Collection , Clang , Microsoft Visual C++ och andra kompilatorer, inklusive icke-traditionella kompilatorer som Emscripten och Cython [13] [14] . Samtidigt bestämmer Meson självständigt vilken kompilator och med vilka parametrar som ska användas. Och korskompileringsprojekt kräver ytterligare konfiguration, som Meson underhåller som en separat fil som kan vara extern till ett Meson-projekt [15] .

Meson använder Ninja som huvudbyggsystem, men kan också använda Microsoft Visual Studio eller Xcode .

Delprojekt

Meson kan automatiskt hitta och använda externa beroenden med pkg-config , CMake och projektspecifik sökning [16] , men detta hittar bara installerade beroenden som Meson inte kan göra något åt. Alternativt, eller som en reserv, kan beroendet tillhandahållas som ett delprojekt - ett Meson-projekt inom ett annat, eller innehållas som en extern nedladdningslänk, eventuellt med patchar [12] . Detta gör att Meson kan lösa " beroendehelvetet " för att underlätta för vanliga användare som vill kompilera ett projekt, men kan också bidra till mjukvaruuppsvällning om ett vanligt installerat beroende skulle kunna användas istället. Det föredragna läget att använda Linux-paket försvinner alltså i bakgrunden.

Meson stöder, förutom sitt eget delprojektsystem, även delprojektsystemet CMake. Meson -sammansättningsfilen kan också referera till Wrap DB-tjänsten [17] .

Integration med ISR

Meson har initialt inbyggt stöd för Visual Studio och XCode, men för att förenkla integrationen med en mängd olika ISR:er utvecklades ett speciellt API för att lösa detta problem. För att göra detta, varje gång Meson bygger, skapar den en "meson-info" -mapp och lägger JSON - informationsfiler i den . Med hjälp av dessa filer kan vilket program som helst få detaljerad information om de projekt som byggs [18] .

Språk

Syntaxen för Meson-sammansättningsbeskrivningsfiler (Meson-språk) är lånad från Python, men är i sig inte ett Python-språk. Den designades på ett sådant sätt att den kan återimplementeras på vilket annat språk som helst [19] [20] . Till exempel är Meson++ [21] en C++-implementering, Python-beroendet är bara en implementeringsdetalj.

Mesonspråket är medvetet inte Turing komplett och kan därför inte uttrycka ett godtyckligt program [22] . Istället kan godtyckliga byggsteg utanför omfattningen av kompilering av språk som stöds representeras som anpassade mål [23] .

Meson-språket är starkt skrivet, så inbyggda typer som bibliotek, körbara filer, strängar och deras listor är inte utbytbara [24] . Variabler har ingen synlig typ, vilket också gör Meson dynamiskt typad. Till skillnad från samma Make , separerar listtypen inte strängar på mellanslag [25] .

Exempel

Låt oss skapa " Hej, värld!" " projekt på C-språket kommer filen att heta " main.c ".

#include <stdio.h> int main () { sätter ( "Hej, världen!" ); returnera 0 ; }

Nästa, bredvid den, skapa en fil - " meson.build ".

projekt ( 'tutorial' , 'c' ) # tutorial är namnet på projektet, # c - programmeringsspråk körbar ( 'demo' , 'main.c' ) # demo är namnet på den körbara filen, # "main.c" - källkodsfil

Låt oss först initiera projektet.

$ meson setup builddir

Katalogen " builddir " kommer att dyka upp, låt oss gå in i den och bygga vårt projekt.

$ cd builddir $ meson kompilering

Den körbara filen är klar, det återstår bara att köra den.

$ ./demo

Programvaruprojekt med Meson

Från listan över programvaruprojekt kan de mest betydelsefulla och inflytelserika [26] noteras :

Se även

Anteckningar

  1. 1 2 Meson Build-systemet : Juridisk information 
  2. Meson-byggsystem på Open Hub: Languages  -sida
  3. 1 2 Meson Build-  systemet
  4. Release 0.63.3 - 2022.
  5. GitHub:  KOPIERING
  6. Meson build system release 0.58. Ett projekt för att skapa en implementering av Meson i C-språket . OpenNET (2 maj 2021). Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  7. Meson manual: Running Meson - Bygga från källan. Bygga katalog med  ninja . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  8. Tim Schürmann. Meson är ett nytt mjukvarubyggesystem . rus-linux.net (18 april 2017). Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  9. Tim Schürmann. Meson - ett nytt byggsystem  . Linux Magazine (1 september 2014). Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  10. Varför heter det Meson?  (engelska) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  11. The Meson Build System: Funktioner - projekt(  ) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 10 februari 2022.
  12. 1 2 The Meson Build System: Wrap dependency system  manual . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  13. ↑ The Meson Build System : Kompilator-ID  . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 21 februari 2022.
  14. Jussi Pakkanen. Hur kompilering fungerar  (engelska) (PDF). meson-manual.com (2020). Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  15. The Meson Build System:  Korskompilering . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  16. Meson Build System: Beroenden - Beroenden med anpassad  uppslagsfunktion . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 21 februari 2022.
  17. ↑ Meson Build System : Meson WrapDB-paket  . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  18. ↑ Meson Build System : Manuell-IDE-integration  . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  19. Meson Build System: FAQ - Varför implementeras Meson i Python (snarare än programmeringsspråk X)?  (engelska) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  20. Meson Build System: FAQ - Men jag vill verkligen ha en version av Meson som inte använder python!  (engelska) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  21. Meson ++  . GitHub . Hämtad 22 januari 2022. Arkiverad från originalet 6 januari 2022.
  22. Meson Build System: FAQ - Varför är Meson inte bara en Python-modul så att jag kan koda min bygginstallation i Python?  (engelska) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  23. Meson Build System: FAQ - Jag har en egen kompilatorverktygskedja X som inte fungerar med Meson, hur kan jag få det att fungera?  (engelska) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  24. Mesonbyggsystemet:  Syntax . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  25. Meson Build System: FAQ - Varför finns det ingen Make-backend?  (engelska) . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.
  26. ↑ Meson Build System: Ytterligare dokumentation - Lista över projekt som använder Meson  . mesonbuild.com . Hämtad 22 januari 2022. Arkiverad från originalet 23 januari 2022.

Länkar