ระบบสร้าง 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, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS และ Windows โดยใช้ GCC, Clang, Visual Studio และคอมไพเลอร์อื่นๆ เป็นไปได้ที่จะสร้างโปรเจ็กต์ในภาษาการเขียนโปรแกรมต่างๆ รวมถึง C, C++, Fortran, Java และ Rust รองรับโหมดการสร้างส่วนเพิ่ม ซึ่งมีเพียงส่วนประกอบที่เกี่ยวข้องโดยตรงกับการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่การสร้างครั้งล่าสุดเท่านั้นที่ถูกสร้างขึ้นใหม่ Meson สามารถใช้เพื่อสร้างบิลด์ที่ทำซ้ำได้ ซึ่งการรันบิลด์ในสภาพแวดล้อมที่แตกต่างกันส่งผลให้มีการสร้างไฟล์ปฏิบัติการที่เหมือนกันโดยสิ้นเชิง

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

  • เพิ่มตัวเลือก “werror: true” ให้กับวิธีการตรวจสอบคอมไพเลอร์ Compiler.compiles(), Compiler.links() และ Compiler.run() ซึ่งถือว่าคำเตือนของคอมไพเลอร์เป็นข้อผิดพลาด (สามารถใช้เพื่อตรวจสอบว่าโค้ดถูกสร้างขึ้นโดยไม่มีคำเตือน ).
  • เพิ่มวิธี has_define เพื่อตรวจสอบคำจำกัดความของสัญลักษณ์โดยตัวประมวลผลล่วงหน้า
  • เพิ่มพารามิเตอร์ macro_name ให้กับฟังก์ชัน configuration_file() แล้ว เพิ่มการป้องกันมาโครสำหรับการเชื่อมต่อสองครั้งผ่าน “#include” (“รวมตัวป้องกัน”) ซึ่งออกแบบในรูปแบบของมาโครในภาษา C (ทำให้การสร้างไฟล์กำหนดค่าง่ายขึ้นด้วยไดนามิก) ชื่อมาโคร)
  • มีการเพิ่มรูปแบบเอาต์พุตใหม่ใน configuration_file() - JSON ("output_format: json")
  • เพิ่มความสามารถในการใช้รายการค่าให้กับพารามิเตอร์ c_std และ cpp_std (เช่น “default_options: 'c_std=gnu11,c11′’)
  • ในโมดูลที่ใช้ CustomTarget เพื่อประมวลผลไฟล์ มีการเพิ่มความสามารถในการปรับแต่งข้อความที่ส่งออกโดยยูทิลิตี้นินจา
  • build_target "jar" เลิกใช้แล้ว และแนะนำให้เรียก "jar()" แทน
  • เพิ่มพารามิเตอร์ 'env' ให้กับเมธอด Generator.process() เพื่อตั้งค่าตัวแปรสภาพแวดล้อมที่ตัวสร้างจะประมวลผลอินพุต
  • เมื่อระบุชื่อเป้าหมายบิลด์ที่เกี่ยวข้องกับไฟล์เรียกทำงาน ส่วนต่อท้าย เช่น "executable('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')"
  • พารามิเตอร์ following_symlinks ถูกเพิ่มให้กับฟังก์ชัน install_data(), install_headers() และ install_subdir() เมื่อตั้งค่าแล้ว ลิงก์สัญลักษณ์จะถูกติดตาม
  • มีการเพิ่มพารามิเตอร์ "fill" ในเมธอด int.to_string() เพื่อเติมสตริงด้วยเลขศูนย์นำหน้าแบบค่อยเป็นค่อยไป ตัวอย่างเช่น การเรียก 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 เพื่อแทนที่เส้นทางไปยังแคชแพ็กเกจ (โครงการย่อย/packagecache) เช่น ทำให้คุณสามารถใช้แคชที่ใช้ร่วมกันในหลายโครงการได้
  • เพิ่มคำสั่ง "meson setup --clearcache" เพื่อล้างแคชถาวร
  • เพิ่มการรองรับคีย์เวิร์ด “required” ให้กับวิธีการตรวจสอบคอมไพลเลอร์ “has_*” ทั้งหมดแล้ว เช่น แทนที่จะใช้ “assert(cc.has_function('some_function'))” คุณสามารถระบุ “cc.has_function('some_function' ได้แล้ว) , จำเป็น: จริง)”
  • มีการเพิ่มคีย์เวิร์ดใหม่rust_abiในฟังก์ชัน shared_library(), static_library(), Library() และ shared_module() ซึ่งควรใช้แทนrust_crate_typeที่เลิกใช้แล้ว

ที่มา: opennet.ru

เพิ่มความคิดเห็น