ระบบสร้าง Meson รุ่น 1.3

ระบบบิลด์ Meson 1.3.0 เปิดตัวแล้ว ซึ่งใช้ในการสร้างโปรเจ็กต์ต่างๆ เช่น X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME และ GTK รหัสของ Meson เขียนด้วยภาษา Python และได้รับอนุญาตภายใต้ลิขสิทธิ์ Apache 2.0

เป้าหมายหลักของการพัฒนา Meson คือเพื่อให้กระบวนการประกอบมีความเร็วสูงรวมกับความสะดวกสบายและใช้งานง่าย แทนที่จะใช้ยูทิลิตี้ make ชุดเครื่องมือ Ninja จะถูกใช้เป็นค่าเริ่มต้นเมื่อสร้าง แต่สามารถใช้แบ็กเอนด์อื่นๆ เช่น xcode และ VisualStudio ได้เช่นกัน ระบบมีตัวจัดการการพึ่งพาหลายแพลตฟอร์มในตัวที่ช่วยให้คุณใช้ Meson เพื่อสร้างแพ็คเกจสำหรับการแจกจ่าย กฎการประกอบจะถูกระบุในภาษาเฉพาะโดเมนที่เรียบง่าย ผู้ใช้สามารถอ่านและเข้าใจได้สูง (ตามที่ผู้เขียนตั้งใจไว้ นักพัฒนาควรใช้เวลาขั้นต่ำในการเขียนกฎ)

รองรับการคอมไพล์ข้ามแพลตฟอร์มและการประกอบภาษาแอสเซมบลี Linuxอิลลูมอส/โซลาริส, ฟรีบีเอสดี, เน็ตบีเอสดี, ดราก้อนฟลายบีเอสดี, ไฮกุ, macOS и Windows Meson รองรับการใช้งานคอมไพเลอร์ต่างๆ เช่น GCC, Clang, Visual Studio และอื่นๆ สามารถสร้างโปรเจ็กต์ได้ด้วยภาษาโปรแกรมหลายภาษา รวมถึง C, C++, Fortran, Java และ Rust รองรับโหมดการสร้างแบบเพิ่มทีละส่วน (Incremental build mode) ซึ่งจะสร้างใหม่เฉพาะส่วนประกอบที่เกี่ยวข้องกับการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่การสร้างครั้งก่อนเท่านั้น นอกจากนี้ Meson ยังสามารถใช้สร้างไฟล์ปฏิบัติการที่ทำซ้ำได้ โดยการรันการสร้างในสภาพแวดล้อมต่างๆ จะทำให้ได้ไฟล์ปฏิบัติการที่เหมือนกันทุกประการ

นวัตกรรมหลักของ Meson 1.3:

  • ขณะนี้เมธอดการตรวจสอบคอมไพเลอร์ compiler.compiles(), compiler.links() และ compiler.run() มีตัวเลือก "werror: true" ซึ่งถือว่าคำเตือนของคอมไพเลอร์เป็นข้อผิดพลาด (สามารถใช้เพื่อตรวจยืนยันว่าโค้ดสร้างโดยไม่มีคำเตือนได้)
  • เพิ่มวิธี has_define เพื่อตรวจสอบว่ามีการกำหนดสัญลักษณ์โดยพรีโปรเซสเซอร์หรือไม่
  • ขณะนี้ฟังก์ชัน configure_file() มีพารามิเตอร์ macro_name ที่เพิ่มการป้องกันแมโครแบบ double-include ผ่าน "#include" ("include guards") ซึ่งได้รับการจัดรูปแบบตามสไตล์ของแมโคร C (ซึ่งช่วยลดความยุ่งยากในการสร้างไฟล์ configure ที่มีชื่อแมโครแบบไดนามิก)
  • มีการเพิ่มรูปแบบเอาต์พุตใหม่ให้กับ configure_file(): JSON ("output_format: json")
  • พารามิเตอร์ c_std และ cpp_std รองรับการใช้รายการค่าแล้ว (เช่น "default_options: 'c_std=gnu11,c11'")
  • ในโมดูลที่ใช้ CustomTarget สำหรับการประมวลผลไฟล์ มีการเพิ่มความสามารถในการปรับแต่งข้อความที่ส่งออกโดยยูทิลิตี้นินจาแล้ว
  • build_target "jar" ไม่สนับสนุนอีกต่อไปแล้ว และจะใช้การเรียก "jar()" แทน
  • มีการเพิ่มพารามิเตอร์ 'env' ลงในวิธี generator.process() เพื่อตั้งค่าตัวแปรสภาพแวดล้อมที่เครื่องกำเนิดไฟฟ้าจะประมวลผลอินพุต
  • เมื่อตั้งชื่อเป้าหมายการสร้างที่เชื่อมโยงกับไฟล์ปฏิบัติการ คำต่อท้ายเช่น "exectuable('foo', 'main.c', name_suffix: 'bar')" จะได้รับอนุญาตให้สร้างไฟล์ปฏิบัติการเพิ่มเติมในไดเร็กทอรีเดียวกัน
  • เพิ่มพารามิเตอร์ "vs_module_defs" ลงใน exectuable() เพื่อใช้ไฟล์ def ที่กำหนดรายการฟังก์ชันที่ส่งไปยัง shared_module()
  • เพิ่มพารามิเตอร์ 'default_options' ลงในฟังก์ชัน find_program() เพื่อตั้งค่าตัวเลือกเริ่มต้นสำหรับโครงการย่อยสำรอง
  • เพิ่มเมธอด fs.relative_to() ซึ่งจะส่งคืนเส้นทางสัมพัทธ์ของอาร์กิวเมนต์แรกเทียบกับอาร์กิวเมนต์ที่สอง หากมีเส้นทางแรกอยู่ ตัวอย่างเช่น "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')"
  • พารามิเตอร์ follow_symlinks ได้ถูกเพิ่มลงในฟังก์ชัน install_data(), install_headers() และ install_subdir() เมื่อตั้งค่าแล้ว จะช่วยให้แน่ใจว่าจะทำตามลิงก์สัญลักษณ์
  • ขณะนี้เมธอด int.to_string() มีพารามิเตอร์ "fill" สำหรับเติมสตริงด้วยเลขศูนย์นำหน้า ตัวอย่างเช่น การเรียกใช้ message(n.to_string(fill: 3)) สำหรับ n=4 จะสร้างสตริง "004"
  • เพิ่มเป้าหมายใหม่ clang-tidy-fix ซึ่งระบุให้รันยูทิลิตี้ clang-tidy ด้วยแฟล็ก "-fix"
  • คำสั่งคอมไพล์ช่วยให้คุณระบุคำต่อท้าย (TARGET_SUFFIX) สำหรับเป้าหมายการสร้าง ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) ได้แล้ว
  • เพิ่มตัวแปรสภาพแวดล้อม MESON_PACKAGE_CACHE_DIR เพื่อแทนที่เส้นทางแคชแพ็กเกจ (subprojects/packagecache) เช่น อนุญาตให้ใช้แคชทั่วไปในหลายโครงการ
  • เพิ่มคำสั่ง "meson setup --clearcache" เพื่อล้างแคชถาวร
  • ตอนนี้วิธีการตรวจสอบคอมไพเลอร์ "has_*" ทั้งหมดรองรับคำสำคัญ "required" แล้ว ตัวอย่างเช่น แทนที่จะใช้ "assert(cc.has_function('some_function'))" คุณสามารถระบุ "cc.has_function('some_function', required: true)" ได้แล้ว
  • มีการเพิ่มคำสำคัญใหม่ rust_abi ให้กับ shared_library(), static_library(), library() และ shared_module() ซึ่งควรใช้แทน rust_crate_type ที่ไม่ใช้แล้ว

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster