กลับไปหน้าบทความ

อ่าน 5 นาที

เมซอน (ซอฟต์แวร์)

เปลี่ยนทางจากการเคลื่อนไหว

Meson ( / ˈ m ɛ . s ɒ n / ) เป็นเครื่องมืออัตโนมัติสำหรับการสร้าง ซอฟต์แวร์ เพื่อสร้างโค้ดเบส Meson ใช้ แนวทาง...

เมซอน (ซอฟต์แวร์)

เมซอน
นักพัฒนาจัสซี ปักกาเนน
ปล่อย2  มีนาคม 2556  ( 2013-03-02 )
เวอร์ชันเสถียร
1.11.1 [ 1 ] / 21 เมษายน 2569 ( 21 เมษายน 2569 ) แก้ไขข้อมูลนี้บนวิกิดาต้า 
เขียนเป็นไพธอน
ระบบปฏิบัติการข้ามแพลตฟอร์ม
พิมพ์เครื่องมือพัฒนาซอฟต์แวร์
ใบอนุญาตใบอนุญาต Apache 2.0
เว็บไซต์mesonbuild.com แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • github.com/mesonbuild/meson

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. "เวอร์ชัน 1.11.1" . 21 เมษายน 2026 . เรียกดูเมื่อ22 เมษายน 2026 .
  2. 1 2 "การทำให้ระบบสร้างโปรแกรมไม่น่าเบื่อ (วิดีโอจาก linux.conf.au)" . YouTube . 16 มกราคม 2015.
  3. "ระบบสร้างโปรแกรมที่มีประสิทธิภาพสูง" 30 มกราคม 2025 Meson มีเป้าหมายที่จะเพิ่มประสิทธิภาพการทำงานของโปรแกรมเมอร์โดยการให้การสนับสนุนที่ง่ายและพร้อมใช้งานสำหรับเครื่องมือและแนวทางการพัฒนาซอฟต์แวร์สมัยใหม่ เช่น การทดสอบหน่วย รายงานความครอบคลุม Valgrind CCache และอื่นๆ
  4. "mesonbuild/meson: ระบบสร้าง Meson" . GitHub . สืบค้นเมื่อ13 เมษายน 2559 .
  5. "คู่มืออ้างอิง "
  6. "รหัสคอมไพเลอร์ "
  7. "วิธีการสร้าง SciPy ด้วย Meson "
  8. "แพ็กเกจ meson-python บน PyPI "
  9. 1 2 3 4 "คำถามที่พบบ่อยเกี่ยวกับ Meson "
  10. "muon.build" . สืบค้นเมื่อ 27 มกราคม 2023 .
  11. Baker, Dylan (28 พฤษภาคม 2021). "dcbaker/meson-plus-plus" . GitHub . สืบค้นเมื่อ28 พฤษภาคม 2021 .
  12. "ไวยากรณ์เมซอน "
  13. "คำสั่ง CMake FILE" หมายเหตุ : เราไม่แนะนำให้ใช้ GLOB เพื่อรวบรวมรายการไฟล์ต้นฉบับจากโครงสร้างไฟล์ต้นฉบับของคุณ หากไม่มีการเปลี่ยนแปลงไฟล์ CMakeLists.txt เมื่อมีการเพิ่มหรือลบไฟล์ต้นฉบับ ระบบสร้างบิลด์จะไม่ทราบว่าเมื่อใดควรขอให้ CMake สร้างใหม่
  14. "การตรวจจับคุณลักษณะอัตโนมัติ "
  15. "ส่วนหัวที่คอมไพล์ล่วงหน้า "
  16. "การสร้าง Unity "
  17. "การทดสอบหน่วย "
  18. "การพึ่งพาที่มีฟังก์ชันการค้นหาแบบกำหนดเอง — เอกสารประกอบของ Meson "
  19. 1 2 "คู่มือระบบการพึ่งพาแบบ Wrap "
  20. "Meson และการพึ่งพาจากภายนอก มีเพียงวิธีเดียวที่ถูกต้อง "
  21. "การรวบรวมข้ามแพลตฟอร์ม "
  22. 1 2 "เป้าหมายของ GNOME: ย้ายโมดูลไปใช้ระบบสร้าง Meson "
  23. "GNOME 3.26 เบต้าเปิดตัว: การพอร์ต Meson เพิ่มเติม, การทำงานของ Wayland "
  24. "ยกเลิกการสนับสนุน autotools" . GitHub .
  25. "เซิร์ฟเวอร์ X.Org รองรับ Meson แล้ว "
  26. "นักพัฒนา Mesa ใกล้จะเลิกใช้ระบบสร้างโปรเจ็กต์ Autotools และหันมาใช้ Meson แทน "
  27. "การใช้ Make แบบไม่ใช้การเรียกซ้ำถือว่าเป็นอันตราย" (PDF) . Microsoft . การใช้ Make แบบเรียกซ้ำถือว่าเป็นอันตรายด้วยเหตุผลที่ดีมาก (Miller 1998) เพราะไม่สามารถติดตามความสัมพันธ์ระหว่างส่วนประกอบต่างๆ ได้อย่างแม่นยำ เมื่อระบบการสร้างประกอบด้วยส่วนประกอบที่แยกจากกันและเรียกใช้งานซึ่งกันและกัน
  28. "คำสั่ง make test ไม่ได้ขึ้นอยู่กับคำสั่ง make all" . ระบบติดตามปัญหาของ Kitware . 23 มิถุนายน 2016 . สืบค้นเมื่อ3 กันยายน 2020 .
  29. "การสนับสนุน CMake สำหรับเฮดเดอร์ที่คอมไพล์ล่วงหน้า"สืบค้นเมื่อ13 มีนาคม 2018
  30. "FetchContent — เอกสารประกอบ CMake 3.15.7 "
  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Meson_(software)&oldid=1341860692 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ เมซอน (ซอฟต์แวร์)

Meson ( / ˈ m ɛ . s ɒ n / ) เป็นเครื่องมืออัตโนมัติสำหรับการสร้าง ซอฟต์แวร์ เพื่อสร้างโค้ดเบส Meson ใช้ แนวทาง...

ภาษา

ไวยากรณ์ของไฟล์คำอธิบายการสร้างของ Meson ภาษา Meson ยืมมาจาก Python แต่ไม่ใช่ Python มันถูกออกแบบมาให้สามารถเขียนใหม่ได้ในภาษาอื่น [ 9 ] ตัวอย่างเช่น muon [ 10 ] เป็นการใช้งานในภาษา C และ Meson++ [ 11 ] เป็นการใช้งานในภาษา C++ การพึ่งพา Python...

ความเร็วและความถูกต้อง

เช่นเดียวกับระบบสร้างโปรแกรมทั่วไป การสร้างโปรแกรมแบบเพิ่มทีละส่วนอย่างถูกต้องเป็นคุณสมบัติที่สำคัญที่สุดที่ช่วยเพิ่มความเร็ว (เนื่องจากความคืบหน้าในการสร้างแบบเพิ่มทีละส่วนทั้งหมดจะถูกทิ้งไปทุกครั้งที่ผู้ใช้ถูกบังคับให้สร้างโปรแกรมใหม่ทั้งหมด)

คุณสมบัติ

เป้าหมายที่ระบุไว้ของ Meson คือการอำนวยความสะดวกให้กับแนวทางการพัฒนาสมัยใหม่ ด้วยเหตุนี้ Meson จึงรู้วิธีการ สร้าง แบบ รวม [ 16 ] สร้างด้วย การครอบคลุมการทดสอบ [ 17 ] เป็นต้น โดยที่โปรแกรมเมอร์ไม่จำเป็นต้องเขียนการสนับสนุนสำหรับสิ่งนี้