ForgeZero 1.9.0 (fz) เป็นเครื่องมือสร้างโปรแกรมแบบบรรทัดคำสั่งสำหรับโปรเจ็กต์ที่เขียนด้วยภาษา C, C++ และภาษาแอสเซมบลี (NASM, GAS, FASM) ได้ถูกปล่อยออกมาแล้ว เครื่องมือนี้ไม่จำเป็นต้องใช้ Makefile หรือไฟล์การกำหนดค่าอื่นๆ สำหรับการใช้งานขั้นพื้นฐาน โค้ดของโปรเจ็กต์เขียนด้วยภาษา Go และได้รับอนุญาตภายใต้ใบอนุญาต MIT
ForgeZero ตรวจจับประเภทไฟล์และเลือกแบ็กเอนด์ที่เหมาะสมโดยอัตโนมัติ ไฟล์โค้ดแต่ละไฟล์จะถูกคอมไพล์เป็นไฟล์อ็อบเจ็กต์ จากนั้นตรวจสอบสัญลักษณ์ส่วนกลางที่ซ้ำกันในอ็อบเจ็กต์ทั้งหมด และเชื่อมโยงเข้าด้วยกันเป็นไฟล์ปฏิบัติการเดียว ไฟล์ที่คอมไพล์แล้วจะถูกแคชไว้และคอมไพล์ใหม่เฉพาะเมื่อมีการเปลี่ยนแปลงในไฟล์โค้ดที่เกี่ยวข้องเท่านั้น นอกจากนี้ ยังสามารถติดตามการเปลี่ยนแปลงของระบบไฟล์และคอมไพล์ใหม่ได้หลังจากมีการอัปเดตไฟล์โค้ด
คอมไพเลอร์ที่รองรับได้แก่ GCC, Clang, G++ และ Clang++; แอสเซมเบลอร์ได้แก่ NASM, GAS และ FASM; ลิงเกอร์ได้แก่ LD, GCC และ Clang; และรองรับ AR archiver คำเตือนที่จำเป็นสำหรับ C และ C++ คือ: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion" ตัวตรวจสอบความปลอดภัย AddressSanitizer และ UndefinedBehaviorSanitizer เปิดใช้งานโดยค่าเริ่มต้น (สามารถปิดใช้งานได้ด้วยแฟล็ก -sanitize=false) แพลตฟอร์มที่รองรับได้แก่: Linux, macOS, Windows (WSL2 และแบบเนทีฟเชิงทดลอง)
คำตอบของ версии 1.9.0:
- เพิ่มแฟล็ก "-target" ซึ่งช่วยให้สามารถคอมไพล์ข้ามสถาปัตยกรรมได้โดยใช้เครื่องมือคำนำหน้าที่เหมาะสม fz จะกำหนดชื่อของคอมไพเลอร์ ลิงเกอร์ และอาร์ไคเฟอร์โดยอัตโนมัติตามตัวระบุที่ระบุ (เช่น "arm-linux-gnueabihf-gcc") รองรับแพลตฟอร์มเป้าหมาย GNU มาตรฐานทั้งหมด รวมถึง arm-linux-gnueabihf, aarch64-linux-gnu และ riscv64-linux-gnu
- Реализована поддержка поддержка протокола LSP (Language Server Protocol). Флаг «-compile-commands» генерирует файл compile_commands.json (Compilation Database) в корне проекта. Файл считывается языковыми เซิร์ฟเวอร์ clangd и ccls, обеспечивая работу автодополнения, навигации по коду и диагностики в редакторах с поддержкой LSP (Neovim, VSCode, CLion, Emacs и др.).
- คำสั่ง fz "-update" ตอนนี้จะบันทึกไฟล์ไบนารีปัจจุบันลงใน /usr/local/bin/fz.old ก่อนที่จะติดตั้งเวอร์ชันใหม่ ทำให้คุณสามารถย้อนกลับไปยังเวอร์ชันก่อนหน้าได้โดยไม่ต้องติดตั้งใหม่
- แก้ไขข้อผิดพลาดในโปรเจ็กต์ที่มีหลายไดเร็กทอรี ซึ่งไฟล์ที่มีชื่อพื้นฐานเหมือนกันจากไดเร็กทอรีย่อยที่แตกต่างกันจะเขียนทับไฟล์ออบเจ็กต์ของกันและกัน ตอนนี้ชื่อไฟล์ออบเจ็กต์จะถูกสร้างขึ้นโดยอิงจากเส้นทางสัมพัทธ์แบบเต็มไปยังไฟล์ต้นฉบับ
- เพิ่มโหมดโต้ตอบ "fz -shell" สำหรับการสร้างไฟล์เดี่ยว
- ได้เพิ่มการครอบคลุมการทดสอบสำหรับคำสั่ง SplitCommand, CmdSet และ CmdBuild แล้ว การครอบคลุมการทดสอบสำหรับแพ็คเกจลิงเกอร์เพิ่มขึ้นจาก 17% เป็น 60% และการครอบคลุมสำหรับทุกแพ็คเกจเกิน 40% แล้ว
- เพิ่มกลไกการทดแทน CheckTool สำหรับสถานการณ์ทดสอบที่มีส่วนประกอบของชุดเครื่องมือขาดหายไป
การเปลี่ยนแปลงจากเวอร์ชันก่อนหน้า:
- เวอร์ชัน 1.8.0 ได้ทำการประกอบไลบรารีแบบคงที่ (-type static / -lib) เพื่อให้มั่นใจว่าชื่อไฟล์อ็อบเจ็กต์มีความเป็นเอกลักษณ์ในโปรเจ็กต์ที่มีหลายไดเร็กทอรี และแก้ไขข้อผิดพลาดในระบบย่อยการประกอบที่เกี่ยวข้องกับการสำรวจเส้นทาง "."
- เวอร์ชัน 1.7.0 เพิ่มการคอมไพล์แบบขนาน (-j N, 0 — ตรวจจับจำนวนคอร์โดยอัตโนมัติ), รองรับสคริปต์ลิงเกอร์ (-T) และที่อยู่จุดเริ่มต้น (-Ttext), โหมดโต้ตอบ (fz -shell), การเลือกรูปแบบเอาต์พุตอย่างชัดเจน (elf32, elf64, bin), การคอมไพล์ไฟล์ C++ (.cpp, .cc, .cxx) ด้วยแฟล็กคำเตือนที่เข้มงวดเช่นเดียวกับภาษา C
- เวอร์ชัน 1.6.0 เพิ่มการเริ่มต้นโปรเจ็กต์ (fz -init, สร้างไฟล์ .fz.yaml, .fzignore, README.md), รองรับรูปแบบไบนารี (-format bin) สำหรับบูตโหลดเดอร์และเฟิร์มแวร์ และฟิลด์การกำหนดค่า libs, flags.cc, flags.asm, flags.ld
- เวอร์ชัน 1.5.0 นำเสนอคุณสมบัติใหม่ๆ เช่น ไดเร็กทอรีแหล่งที่มาหลายแห่ง (source_dirs), รายการไฟล์ที่ระบุอย่างชัดเจน (source_files), รูปแบบการรวม/การยกเว้น, ฟิลด์ libs สำหรับไลบรารีของลิงเกอร์, ไฟล์ .fzignore และการรวมไฟล์การกำหนดค่าหลายระดับ
ที่มา: opennet.ru
