เมซอน (ซอฟต์แวร์)
| เมซอน | |
|---|---|
โลโก้ตั้งแต่ปี 2019 | |
การกำหนดค่า Meson dav1d | |
| นักพัฒนา | จัสซี ปักกาเนน |
| ปล่อย | 2 มีนาคม 2556 ( 2013-03-02 ) |
| เวอร์ชันเสถียร | |
| เขียนเป็น | ไพธอน |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| พิมพ์ | เครื่องมือพัฒนาซอฟต์แวร์ |
| ใบอนุญาต | ใบอนุญาต Apache 2.0 |
| เว็บไซต์ | mesonbuild.com |
| ที่เก็บข้อมูล |
|
Meson ( / ˈ m ɛ . s ɒ n / ) [ 2 ]เป็นเครื่องมืออัตโนมัติสำหรับการสร้าง ซอฟต์แวร์ เพื่อสร้างโค้ดเบส Meson ใช้ แนวทาง "การกำหนดค่าตามข้อตกลง"เพื่อลดข้อมูลที่จำเป็นในการกำหนดค่าการทำงานทั่วไปให้น้อยที่สุด[ 3 ] Meson เป็นซอฟต์แวร์ฟรีและโอเพนซอร์สภายใต้Apache License 2.0 [ 4 ]
Meson เขียนด้วยภาษา Pythonและทำงานบน ระบบปฏิบัติการที่คล้าย Unix (รวมถึงLinuxและmacOS ), Windowsและระบบปฏิบัติการอื่นๆ รองรับการสร้างC , C++ , C# , CUDA , Objective-C , D , Fortran , Java , RustและVala [ 5 ] จัดการการพึ่งพาผ่านกลไกที่ชื่อว่าWrapรองรับGNU Compiler Collection (gcc), Clang , Visual C++และคอมไพเลอร์อื่นๆ รวมถึงคอมไพเลอร์ที่ไม่ใช่แบบดั้งเดิม เช่นEmscriptenและCython [ 6 ]โครงการนี้ใช้ninjaเป็นระบบสร้างแบ็กเอนด์หลัก แต่ยังสามารถใช้Visual StudioหรือXcodeเป็นแบ็กเอนด์ได้ ด้วย
การสนับสนุน FortranและCythonของ Meson ได้รับการปรับปรุงเพื่อช่วยโครงการทางวิทยาศาสตร์ต่างๆ ในการเปลี่ยนจากsetuptools ไปใช้ Meson เช่นSciPy [ 7 ] Meson สามารถใช้เป็นแบ็กเอนด์ PEP517 เพื่อสร้าง Python wheelsผ่านแพ็คเกจmeson-python [ 8 ]
ภาษา
ไวยากรณ์ของไฟล์คำอธิบายการสร้างของ Meson ภาษา Meson ยืมมาจากPythonแต่ไม่ใช่ Python มันถูกออกแบบมาให้สามารถเขียนใหม่ได้ในภาษาอื่น[ 9 ]ตัวอย่างเช่น muon [ 10 ]เป็นการใช้งานในภาษา C และ Meson++ [ 11 ]เป็นการใช้งานในภาษา C++ การพึ่งพา Python เป็นรายละเอียดของการใช้งาน
ภาษา Meson ไม่ได้ตั้งใจให้สมบูรณ์แบบ Turingและด้วยเหตุนี้จึงไม่สามารถแสดงโปรแกรมใดๆ ได้[ 9 ]แต่ขั้นตอนการสร้างใดๆ ที่นอกเหนือจากการคอมไพล์ภาษาที่รองรับสามารถแสดงเป็นเป้าหมายที่กำหนดเองได้
ภาษา Meson เป็นภาษาที่มีการกำหนดประเภทอย่างเข้มงวดเช่น ประเภทในตัว เช่น ไลบรารี ไฟล์ปฏิบัติการ สตริง และรายการของประเภทเหล่านั้น ไม่สามารถใช้แทนกันได้[ 12 ]โดยเฉพาะอย่างยิ่ง ต่างจากMakeประเภทรายการจะไม่แยกสตริงตามช่องว่าง[ 9 ]ดังนั้น ช่องว่างและอักขระอื่นๆ ในชื่อไฟล์และอาร์กิวเมนต์ของโปรแกรมจึงได้รับการจัดการอย่างสะอาดหมดจด
ความเร็วและความถูกต้อง
เช่นเดียวกับระบบสร้างโปรแกรมทั่วไป การสร้างโปรแกรมแบบเพิ่มทีละส่วนอย่างถูกต้องเป็นคุณสมบัติที่สำคัญที่สุดที่ช่วยเพิ่มความเร็ว (เนื่องจากความคืบหน้าในการสร้างแบบเพิ่มทีละส่วนทั้งหมดจะถูกทิ้งไปทุกครั้งที่ผู้ใช้ถูกบังคับให้สร้างโปรแกรมใหม่ทั้งหมด)
แตกต่างจากการใช้ Make เพียงอย่างเดียว ขั้นตอนการกำหนดค่าแยกต่างหากช่วยให้มั่นใจได้ว่าการเปลี่ยนแปลงอาร์กิวเมนต์ ตัวแปรสภาพแวดล้อม และผลลัพธ์ของคำสั่งจะไม่ถูกนำไปใช้เพียงบางส่วนในการสร้างครั้งถัดไป ซึ่งจะทำให้การสร้างนั้นล้าสมัย
เช่นเดียวกับ Ninja, Meson ไม่รองรับการใช้ globbingกับไฟล์ต้นฉบับ[ 9 ]โดยการกำหนดให้ไฟล์ต้นฉบับทั้งหมดต้องอยู่ในรายการไฟล์คำจำกัดความการสร้าง การประทับเวลาของไฟล์คำจำกัดความการสร้างนั้นเพียงพอที่จะระบุได้ว่าชุดไฟล์ต้นฉบับมีการเปลี่ยนแปลงหรือไม่ ซึ่งทำให้มั่นใจได้ว่าไฟล์ต้นฉบับที่ถูกลบจะถูกตรวจพบCMakeรองรับการใช้ globbing แต่ไม่แนะนำให้ใช้ด้วยเหตุผลเดียวกัน[ 13 ]
Meson ใช้ccacheโดยอัตโนมัติหากติดตั้ง[ 14 ]นอกจากนี้ยังตรวจจับการเปลี่ยนแปลงตารางสัญลักษณ์ของไลบรารีที่ใช้ร่วมกันเพื่อข้ามการเชื่อมโยงไฟล์ปฏิบัติการกับไลบรารีเมื่อไม่มีการเปลี่ยนแปลงABIรองรับส่วนหัวที่คอมไพล์ล่วงหน้า แต่ต้องมีการกำหนดค่า [ 15 ]โดยค่าเริ่มต้น การสร้างแบบดีบักจะไม่มีการเพิ่มประสิทธิภาพ
คุณสมบัติ
เป้าหมายที่ระบุไว้ของ Meson คือการอำนวยความสะดวกให้กับแนวทางการพัฒนาสมัยใหม่ ด้วยเหตุนี้ Meson จึงรู้วิธีการ สร้าง แบบรวม[ 16 ]สร้างด้วยการครอบคลุมการทดสอบ[ 17 ]เป็นต้น โดยที่โปรแกรมเมอร์ไม่จำเป็นต้องเขียนการสนับสนุนสำหรับสิ่งนี้
โครงการย่อย
Meson สามารถค้นหาและใช้การพึ่งพาภายนอกที่ติดตั้งบนระบบของผู้ใช้โดยอัตโนมัติผ่านpkg-config , CMake และการค้นหาเฉพาะโครงการ[ 18 ] หรืออีกทางเลือกหนึ่ง หรือเป็นทางเลือกสำรอง การพึ่งพาอาจถูกจัดเตรียมเป็นโครงการย่อย – โครงการ Meson ภายในโครงการอื่น ไม่ว่าจะบรรจุอยู่ภายในหรือเป็นลิงก์ดาวน์โหลด อาจมีแพตช์[ 19 ]วิธีนี้ช่วยให้ Meson แก้ปัญหาการพึ่งพาที่ซับซ้อนเพื่อความสะดวกของผู้ใช้ทั่วไปที่ต้องการคอมไพล์โครงการ แต่อาจทำให้ซอฟต์แวร์มีขนาดใหญ่ขึ้นหากสามารถใช้การพึ่งพาที่ติดตั้งทั่วไปแทนได้ ดังนั้นโหมดที่ผู้จัดแพ็กเกจ Linux นิยมใช้ จึงเป็นแบบสำรอง[ 20 ]
Meson รองรับโปรเจกต์ย่อยของ Meson และ CMake ไฟล์สร้างของ Meson อาจอ้างอิงถึงบริการ WrapDB ด้วยเช่นกัน[ 19 ]
การรวบรวมข้ามแพลตฟอร์ม
การคอมไพล์แบบครอสต้องใช้การกำหนดค่าเพิ่มเติม ซึ่ง Meson รองรับในรูปแบบของไฟล์ครอส แยกต่างหาก ซึ่งสามารถอยู่นอกโครงการ Meson ได้[ 21 ]
การตั้งค่าไดเร็กทอรีการติดตั้ง
การตั้งค่าไดเร็กทอรีการติดตั้งไลบรารีบนระบบ Unix x86_64 นั้น Meson จะจัดการโดยอัตโนมัติ แต่เครื่องมืออื่นๆ เช่น Autotools จะไม่ทำเช่นนั้น
ผู้รับเลี้ยงบุตรบุญธรรม
GNOMEตั้งเป้าหมายที่จะย้ายโปรเจกต์ของตนไปยัง Meson [ 22 ] ณ ปลายปี 2017 GNOME Shell เองต้องการ Meson เพียงอย่างเดียวหลังจากเลิกใช้ Autotools [ 23 ] และส่วนประกอบหลักเช่นGTK + , Clutter - GTK , GLibและGStreamerสามารถสร้างได้ด้วย Meson [ 22 ]
โครงการ freedesktop.orgหลายโครงการได้เปลี่ยนมาใช้ Meson แล้ว Systemdอาศัย Meson นับตั้งแต่ยกเลิก Autotools ในเวอร์ชัน 234 [ 24 ]และX.Org [ 25 ]และMesa [ 26 ]ก็ถูกพอร์ตไปยัง Meson เช่นกัน
การเปรียบเทียบคุณสมบัติ
การเปรียบเทียบคุณสมบัติกับCMakeและMake
| คุณสมบัติ | เมซอน | ซีเมค | ทำ |
|---|---|---|---|
| ประเภทข้อมูล | ใช่ | เลขที่ | เลขที่ |
| ประเภทข้อมูลรายการ | ใช่ | สตริงที่คั่นด้วยเครื่องหมายเซมิโคลอน | สตริงที่คั่นด้วยช่องว่าง |
| ประเภทข้อมูลพจนานุกรม | ตั้งแต่เวอร์ชัน 0.47.0 | เลขที่ | เลขที่ |
| การจับคู่ไฟล์ | เลขที่ | ใช่ | ส่วนขยายที่ไม่เป็นมาตรฐานในบางรูปแบบ |
| สามารถขยายเพิ่มเติมได้ผ่านฟังก์ชันที่กำหนดเอง | เลขที่ | ใช่ | เลขที่ |
| สามารถอ่านผลลัพธ์ของคำสั่งใดๆ ก็ได้ (ในระหว่างการตั้งค่า) | รันคอมมานด์ | ใช่ | ใช่ |
| สามารถเรียกใช้คำสั่งใดๆ ก็ได้ในระหว่างการสร้าง โดยกำหนดเป็นสูตรสำหรับเป้าหมายที่กำหนดเอง | ใช่ | ใช่ | ใช่ |
| ห้ามการสร้างเวอร์ชันเก่า (การสร้างใหม่บางส่วนเนื่องจากการเปลี่ยนแปลงอินพุต) | ใช่ (ยกเว้นกรณีที่มีข้อผิดพลาด) | หากไม่ใช้ globbing กับไฟล์ต้นฉบับ | การสร้างแบบเรียกซ้ำ (รูปแบบสำนวน) ถูกทำลายในส่วนนี้[ 27 ] |
เป้าหมายที่ทำการทดสอบจะขึ้นอยู่กับการทดสอบที่กำลังสร้างอยู่ (เช่นtestขึ้นอยู่กับall) | ใช่ | ไม่ และadd_dependencies(test all)เป็นสิ่งต้องห้าม เพราะtestเป้าหมายถูกสงวนไว้[ 28 ] | เพิ่มเข้าไปง่ายมาก |
| แคช | อัตโนมัติ | เพิ่มเข้าไปง่ายมาก | เพิ่มเข้าไปง่ายมาก |
| ดิสท์ซีซี | เพิ่มเข้าไปง่ายมาก | เพิ่มเข้าไปง่ายมาก | เพิ่มเข้าไปง่ายมาก |
| การเชื่อมโยงใหม่โดยคำนึงถึงตารางสัญลักษณ์ | ใช่ | ทำเองเลย | ทำเองเลย |
| ส่วนหัวที่คอมไพล์ล่วงหน้า | ไม่จำเป็น | CMake ≥ 3.16 [ 29 ] [ 2 ] | ทำเองเลย |
| การค้นหาส่วนประกอบที่ติดตั้งไว้ | pkg-config , แพ็คเกจ CMake | โมดูล CMake, pkg-config | — |
| กำลังดาวน์โหลดส่วนประกอบที่จำเป็นโดยอัตโนมัติ | โครงการย่อย | ดึงเนื้อหา[ 30 ] | — |
| ค้นหาส่วนประกอบที่ติดตั้งไว้ พร้อมตัวเลือกดาวน์โหลดสำรอง | pkg-config + โปรเจ็กต์ย่อย | โมดูล CMake/pkg-config +FetchContent | — |
| ตัวสร้างไฟล์ pkg-config | ใช่ | เลขที่ | — |
| อำนวยความสะดวกในการใช้งานโดยการดาวน์โหลดส่วนประกอบโดยอัตโนมัติ | สามารถใช้เป็นโครงการย่อยของ Meson ได้ | เลขที่ | — |
ดูเพิ่มเติม
- ↑ "เวอร์ชัน 1.11.1" . 21 เมษายน 2026 . เรียกดูเมื่อ22 เมษายน 2026 .
- 1 2 "การทำให้ระบบสร้างโปรแกรมไม่น่าเบื่อ (วิดีโอจาก linux.conf.au)" . YouTube . 16 มกราคม 2015.
- ↑ "ระบบสร้างโปรแกรมที่มีประสิทธิภาพสูง" 30 มกราคม 2025
Meson มีเป้าหมายที่จะเพิ่มประสิทธิภาพการทำงานของโปรแกรมเมอร์โดยการให้การสนับสนุนที่ง่ายและพร้อมใช้งานสำหรับเครื่องมือและแนวทางการพัฒนาซอฟต์แวร์สมัยใหม่ เช่น การทดสอบหน่วย รายงานความครอบคลุม Valgrind CCache และอื่นๆ
- ↑ "mesonbuild/meson: ระบบสร้าง Meson" . GitHub . สืบค้นเมื่อ13 เมษายน 2559 .
- ↑ "คู่มืออ้างอิง "
- ↑ "รหัสคอมไพเลอร์ "
- ↑ "วิธีการสร้าง SciPy ด้วย Meson "
- ↑ "แพ็กเกจ meson-python บน PyPI "
- 1 2 3 4 "คำถามที่พบบ่อยเกี่ยวกับ Meson "
- ↑ "muon.build" . สืบค้นเมื่อ 27 มกราคม 2023 .
- ↑ Baker, Dylan (28 พฤษภาคม 2021). "dcbaker/meson-plus-plus" . GitHub . สืบค้นเมื่อ28 พฤษภาคม 2021 .
- ↑ "ไวยากรณ์เมซอน "
- ↑ "คำสั่ง CMake FILE" หมายเหตุ :
เราไม่แนะนำให้ใช้ GLOB เพื่อรวบรวมรายการไฟล์ต้นฉบับจากโครงสร้างไฟล์ต้นฉบับของคุณ หากไม่มีการเปลี่ยนแปลงไฟล์ CMakeLists.txt เมื่อมีการเพิ่มหรือลบไฟล์ต้นฉบับ ระบบสร้างบิลด์จะไม่ทราบว่าเมื่อใดควรขอให้ CMake สร้างใหม่
- ↑ "การตรวจจับคุณลักษณะอัตโนมัติ "
- ↑ "ส่วนหัวที่คอมไพล์ล่วงหน้า "
- ↑ "การสร้าง Unity "
- ↑ "การทดสอบหน่วย "
- ↑ "การพึ่งพาที่มีฟังก์ชันการค้นหาแบบกำหนดเอง — เอกสารประกอบของ Meson "
- 1 2 "คู่มือระบบการพึ่งพาแบบ Wrap "
- ↑ "Meson และการพึ่งพาจากภายนอก มีเพียงวิธีเดียวที่ถูกต้อง "
- ↑ "การรวบรวมข้ามแพลตฟอร์ม "
- 1 2 "เป้าหมายของ GNOME: ย้ายโมดูลไปใช้ระบบสร้าง Meson "
- ↑ "GNOME 3.26 เบต้าเปิดตัว: การพอร์ต Meson เพิ่มเติม, การทำงานของ Wayland "
- ↑ "ยกเลิกการสนับสนุน autotools" . GitHub .
- ↑ "เซิร์ฟเวอร์ X.Org รองรับ Meson แล้ว "
- ↑ "นักพัฒนา Mesa ใกล้จะเลิกใช้ระบบสร้างโปรเจ็กต์ Autotools และหันมาใช้ Meson แทน "
- ↑ "การใช้ Make แบบไม่ใช้การเรียกซ้ำถือว่าเป็นอันตราย" (PDF) . Microsoft .
การใช้ Make แบบเรียกซ้ำถือว่าเป็นอันตรายด้วยเหตุผลที่ดีมาก (Miller 1998) เพราะไม่สามารถติดตามความสัมพันธ์ระหว่างส่วนประกอบต่างๆ ได้อย่างแม่นยำ เมื่อระบบการสร้างประกอบด้วยส่วนประกอบที่แยกจากกันและเรียกใช้งานซึ่งกันและกัน
- ↑ "คำสั่ง make test ไม่ได้ขึ้นอยู่กับคำสั่ง make all" . ระบบติดตามปัญหาของ Kitware . 23 มิถุนายน 2016 . สืบค้นเมื่อ3 กันยายน 2020 .
- ↑ "การสนับสนุน CMake สำหรับเฮดเดอร์ที่คอมไพล์ล่วงหน้า"สืบค้นเมื่อ13 มีนาคม 2018
- ↑ "FetchContent — เอกสารประกอบ CMake 3.15.7 "