C, C++ ve assembly dilleri (NASM, GAS, FASM) ile yazılmış projeler için komut satırı tabanlı bir derleme aracı olan ForgeZero 1.9.0 (fz) yayınlandı. Araç, temel kullanım için Makefile veya diğer yapılandırma dosyalarına ihtiyaç duymaz. Proje kodu Go dilinde yazılmıştır ve MIT lisansı altındadır.
ForgeZero dosya türünü algılar ve otomatik olarak uygun arka ucu seçer. Her kod dosyası bir nesne dosyasına derlenir, ardından tüm nesnelerde yinelenen genel semboller kontrol edilir ve tek bir yürütülebilir dosyaya bağlanır. Derlenmiş dosyalar önbelleğe alınır ve yalnızca ilgili kod dosyalarında değişiklik yapıldıktan sonra yeniden derlenir. İsteğe bağlı olarak, kod dosyası güncellemelerinden sonra dosya sistemi değişiklik izleme ve yeniden derleme mümkündür.
Desteklenen derleyiciler GCC, Clang, G++ ve Clang++; assembler'lar NASM, GAS ve FASM; linker'lar LD, GCC ve Clang; ve AR arşivleyici desteklenmektedir. C ve C++ için zorunlu uyarılar şunlardır: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". AddressSanitizer ve UndefinedBehaviorSanitizer temizleyicileri varsayılan olarak etkinleştirilmiştir (bunlar -sanitize=false bayrağı ile devre dışı bırakılabilir). Desteklenen platformlar şunlardır: Linux, macOS, Windows (WSL2 ve deneysel olarak doğal).
1.9.0 sürümündeki ana değişiklikler:
- "-target" bayrağı eklendi. Bu, uygun önek araçlarıyla herhangi bir mimari için çapraz derlemeyi mümkün kılar. fz, belirtilen tanımlayıcıya (örneğin, "arm-linux-gnueabihf-gcc") göre derleyici, bağlayıcı ve arşivleyici adlarını otomatik olarak belirler. arm-linux-gnueabihf, aarch64-linux-gnu ve riscv64-linux-gnu dahil olmak üzere tüm standart GNU hedef platformları desteklenmektedir.
- Dil Sunucusu Protokolü (LSP) desteği uygulanmıştır. "-compile-commands" bayrağı, proje kök dizininde compile_commands.json (Derleme Veritabanı) dosyasını oluşturur. Bu dosya, dil tarafından okunur. sunucular clangd ve ccls, LSP'yi destekleyen editörlerde (Neovim, VSCode, CLion, Emacs, vb.) otomatik tamamlama, kodda gezinme ve tanılama özellikleri sağlar.
- Artık `fz "-update"` komutu, yeni bir sürüm yüklemeden önce mevcut ikili dosyayı `/usr/local/bin/fz.old` konumuna kaydediyor; bu sayede yeniden yükleme yapmadan önceki sürüme geri dönebilirsiniz.
- Çoklu dizinli projelerde, farklı alt dizinlerden aynı temel ada sahip dosyaların birbirlerinin nesne dosyalarının üzerine yazmasına neden olan bir hata düzeltildi. Nesne dosyası adları artık kaynak dosyanın tam göreceli yoluna göre oluşturulmaktadır.
- Tek tek dosyaları derlemek için etkileşimli mod "fz -shell" uygulandı.
- SplitCommand, CmdSet ve CmdBuild komutları için test kapsamı eklendi. Bağlayıcı paketinin test kapsamı %17'den %60'a yükseldi ve tüm paketlerin kapsamı %40'ı aştı.
- Eksik araç zinciri bileşenlerine sahip test senaryoları için CheckTool yerine geçecek bir mekanizma eklendi.
Önceki sürümlere göre değişiklikler:
- 1.8.0 sürümü, statik kütüphanelerin derlenmesini (-type static / -lib) uygular, çok dizinli projelerde nesne dosyası adlarının benzersizliğini sağlar ve ".." yolunun izlenmesiyle ilgili derleme alt sistemindeki hataları düzeltir.
- Sürüm 1.7.0, paralel derleme (-j N, 0 — çekirdek sayısının otomatik tespiti), bağlayıcı komut dosyaları (-T) ve giriş noktası adresleri (-Ttext) desteği, etkileşimli mod (fz -shell), çıktı formatının açıkça seçilmesi (elf32, elf64, bin), C++ dosyalarının (.cpp, .cc, .cxx) C için olduğu gibi aynı katı uyarı bayraklarıyla derlenmesi özelliklerini ekler.
- Sürüm 1.6.0, proje başlatma (fz -init, .fz.yaml, .fzignore, README.md dosyaları oluşturur), önyükleyiciler ve bellenim için bin formatı desteği (-format bin) ve yapılandırma alanları libs, flags.cc, flags.asm, flags.ld dosyalarını ekler.
- Sürüm 1.5.0, birden fazla kaynak dizini (source_dirs), açık dosya listeleri (source_files), dahil etme/hariç tutma kalıpları, bağlayıcı kütüphaneleri için bir libs alanı, .fzignore dosyası ve yapılandırma dosyalarının çok seviyeli birleştirilmesini sunmaktadır.
Kaynak: opennet.ru
