Meson (samlesystem)

Meson

Byggeproces for dav1d (codec-dekoder fra VideoLAN-projektet) med Meson
Type gratis og open source software og byggeautomatiseringsværktøj [d]
Udvikler Jussi Pakkanen [d] [1]
Skrevet i Python [2]
Operativ system Unix-lignende operativsystem [3] og Microsoft Windows
Interface sprog engelsk
Første udgave 2. marts 2012
Hardware platform tværplatform [3]
nyeste version
Stat aktiv
Licens Apache-licens 2.0 [5] [1]
Internet side mesonbuild.com
 Mediefiler på Wikimedia Commons

Meson ( MFA [ ˈ m i ː z ɒ n ]; fra  engelsk  -  " meson " ) er et konsolværktøj på tværs af platforme , der automatiserer processen med at bygge software fra kildekode . Meson er open source og licenseret under Apache -licensen . Hovedideen med Meson er at bygge så hurtigt som muligt og ikke bruge en eneste dråbe tid på at fejlfinde og teste , samt at vente på, at kompileringsprocessen starter . Værktøjet har også et længere, fuldt navn - "The Meson build system" (Meson Assembly System). Men på trods af at Meson officielt er positioneret som et byggesystem, er det faktisk ikke det, da det grundlæggende bruger et andet hjælpeprogram - Ninja -byggesystemet og en række andre hjælpeprogrammer [6] [7] .

Historie

Oprettelse

Den første version af Meson dukkede op i juleferien i 2012 og blev udviklet af den finske fysiker - programmør Jussi Pakkanen. Udvikleren var nedslået af den tilstand, hvor monteringsautomatiseringssystemerne ankom på det tidspunkt. Mange kunne han ikke lide, fordi de var for langsomme, nogle var for svære at omsætte i praksis, og andre havde for kompliceret og uklar syntaks . Da han ikke havde fundet det byggesystem, han ønskede, besluttede Jussi at bruge sin fritid denne ferieweekend og skabe sit eget byggesystem, der ville passe til hans behov [8] [9] .

Etymologi

Navnet på hjælpeprogrammet blev valgt under hensyntagen til, at det ikke skulle falde sammen med navnet på nogen pakke fra Debians systempakkehåndteringsdatabase eller med noget projekt i SourceForge- databasen . Da Jussi er fysiker-programmør, besluttede han på et tidspunkt at bruge navnet på elementarpartikelen - Gluon (eng. Gluon, fra ordet lim - lim), hvilket antyder, at "gluoner er elementarpartikler, der holder protoner og neutroner sammen, meget ligesom byggesystemets opgave er at tage stykker af kildekode og en compiler og derefter linke dem sammen." Men desværre var dette navn allerede taget, så efter at have sorteret gennem flere resterende subatomære partikler fandt han ud af, at navnet på partikelmesonen viste sig at være frit [10] .

Funktioner

Mesons erklærede mål er at fremme moderne udviklingsmetoder. Såsom at bruge “ single assembly ” metoden, assembly med kodedækning , LTO optimering ( link time optimization ) osv. Uden at programmøren skal skrive support til dette.

Portabilitet

Skrevet i Python , kører Meson indbygget på Unix-lignende operativsystemer , inklusive macOS , samt Microsoft Windows og en række andre operativsystemer.

Meson understøtter C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust , Vala [11] og har en afhængighedshåndteringsmekanisme kaldet "Wrap" [12] .

Meson understøtter GNU Compiler Collection , Clang , Microsoft Visual C++ og andre compilere, inklusive ikke-traditionelle compilere såsom Emscripten og Cython [13] [14] . Samtidig bestemmer Meson selvstændigt, hvilken compiler og med hvilke parametre der skal bruges. Og krydskompilering af projekter kræver yderligere konfiguration, som Meson vedligeholder som en separat fil, der kan være ekstern i forhold til et Meson-projekt [15] .

Meson bruger Ninja som hovedbyggesystem, men kan også bruge Microsoft Visual Studio eller Xcode .

Delprojekter

Meson kan automatisk finde og bruge eksterne afhængigheder med pkg-config , CMake og projektspecifik søgning [16] , men denne finder kun installerede afhængigheder som Meson ikke kan gøre noget ved. Alternativt, eller som et fallback, kan afhængigheden leveres som et underprojekt - et Meson-projekt i et andet, eller indeholdt som et eksternt downloadlink, eventuelt med patches [12] . Dette giver Meson mulighed for at løse " afhængighedshelvede " af hensyn til almindelige brugere, der ønsker at kompilere et projekt, men kan også bidrage til software- bloat, hvis en fælles installeret afhængighed kunne bruges i stedet. Således forsvinder den foretrukne måde at bruge Linux-pakker i baggrunden.

Meson understøtter, udover sit eget delprojektsystem, også CMake delprojektsystemet. Meson- assemblyfilen kan også henvise til Wrap DB-tjenesten [17] .

Integration med ISR

Meson har oprindeligt indbygget understøttelse af Visual Studio og XCode, men for at forenkle integrationen med en bred vifte af ISR'er blev der udviklet en speciel API til at løse dette problem. For at gøre dette, hver gang Meson bygger, opretter den en "meson-info" -mappe og lægger JSON - informationsfiler i den . Ved hjælp af disse filer kan ethvert program få detaljeret information om de projekter, der bygges [18] .

Sprog

Syntaksen for Meson-samlingsbeskrivelsesfiler (Meson-sprog) er lånt fra Python, men er ikke i sig selv et Python-sprog. Det blev designet på en sådan måde, at det kan genimplementeres på et hvilket som helst andet sprog [19] [20] . For eksempel er Meson++ [21] en C++ implementering, Python-afhængigheden er blot en implementeringsdetalje.

Meson-sproget er målrettet ikke Turing komplet og kan derfor ikke udtrykke et vilkårligt program [22] . I stedet kan vilkårlige byggetrin ud over omfanget af kompilering af understøttede sprog repræsenteres som brugerdefinerede mål [23] .

Meson-sproget er stærkt indtastet, så indbyggede typer såsom bibliotek, eksekverbare, strenge og deres lister er ikke udskiftelige [24] . Variabler har ingen synlig type, hvilket også gør Meson dynamisk skrevet. I modsætning til samme mærke adskiller listetypen ikke strenge på mellemrum [25] .

Eksempel

Lad os skabe " Hej, verden!" " projekt i C-sprog, vil filen blive kaldt " main.c ".

#include <stdio.h> int main () { sætter ( "Hej, verden!" ); returnere 0 ; }

Ved siden af ​​den skal du oprette en fil - " meson.build ".

projekt ( 'tutorial' , 'c' ) # tutorial er navnet på projektet, # c - programmeringssprog eksekverbar ( 'demo' , 'main.c' ) # demo er navnet på den eksekverbare, # "main.c" - kildekodefil

Lad os først initialisere projektet.

$ meson setup builddir

Mappen " builddir " vises, lad os gå ind i den og bygge vores projekt.

$ cd builddir $ meson kompilering

Den eksekverbare fil er klar, det er kun tilbage at køre den.

$ ./demo

Softwareprojekter ved hjælp af Meson

Fra listen over softwareprojekter kan de mest betydningsfulde og indflydelsesrige [26] noteres :

Se også

Noter

  1. 1 2 Meson Build-systemet : Juridisk information 
  2. Meson-byggesystem på Open Hub: Languages-  side
  3. 1 2 Meson Build  -systemet
  4. Udgivelse 0.63.3 - 2022.
  5. GitHub:  KOPIERING
  6. Meson build system release 0.58. Et projekt for at skabe en implementering af Meson i C-sproget . OpenNET (2. maj 2021). Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  7. Meson manual: Running Meson - Bygning fra kilden. Bygningsmappe med  ninja . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  8. Tim Schürmann. Meson er et nyt softwarebyggesystem . rus-linux.net (18. april 2017). Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  9. Tim Schürmann. Meson - et nyt byggesystem  . Linux Magazine (1. september 2014). Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  10. Hvorfor hedder det Meson?  (engelsk) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  11. Meson Build System: Funktioner - projekt(  ) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 10. februar 2022.
  12. 1 2 The Meson Build System: Wrap dependency system  manual . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  13. ↑ Meson Build System : Compiler id'er  . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 21. februar 2022.
  14. Jussi Pakkanen. Sådan fungerer kompilering  (engelsk) (PDF). meson-manual.com (2020). Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  15. Meson Build System:  Krydskompilering . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  16. Meson Build System: Afhængigheder - Afhængigheder med brugerdefineret  opslagsfunktion . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 21. februar 2022.
  17. ↑ Meson Build System : Meson WrapDB-pakker  . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  18. ↑ Meson Build System : Manuel-IDE-integration  . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  19. Meson Build System: FAQ - Hvorfor er Meson implementeret i Python (i stedet for programmeringssproget X)?  (engelsk) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  20. Meson Build System: FAQ - Men jeg vil virkelig gerne have en version af Meson, der ikke bruger python!  (engelsk) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  21. Meson ++  . GitHub . Hentet 22. januar 2022. Arkiveret fra originalen 6. januar 2022.
  22. Meson Build System: FAQ - Hvorfor er Meson ikke bare et Python-modul, så jeg kunne kode min build-opsætning i Python?  (engelsk) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  23. Meson Build System: FAQ - Jeg har proprietær compiler toolchain X, der ikke virker med Meson, hvordan kan jeg få det til at fungere?  (engelsk) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  24. Meson Build System:  Syntaks . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  25. Meson Build System: FAQ - Hvorfor er der ikke en Make-backend?  (engelsk) . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.
  26. ↑ Meson Build System: Yderligere dokumentation - Liste over projekter, der bruger Meson  . mesonbuild.com . Hentet 22. januar 2022. Arkiveret fra originalen 23. januar 2022.

Links