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 归档器。C 和 C++ 的强制警告包括:`-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion`。AddressSanitizer 和 UndefinedBehaviorSanitizer 清理器默认启用(可以使用 `-sanitize=false` 标志禁用)。支持的平台包括: Linux, macOS, Windows (WSL2 和实验性原生)。
Основные изменения версии 1.9.0:
- 添加了“-target”标志fz 能够为任何架构进行交叉编译,并支持相应的工具前缀。fz 会根据指定的标识符(例如“arm-linux-gnueabihf-gcc”)自动确定编译器、链接器和归档器的名称。它支持所有标准的 GNU 目标平台,包括 arm-linux-gnueabihf、aarch64-linux-gnu 和 riscv64-linux-gnu。
- 已实现对语言服务器协议 (LSP) 的支持。“-compile-commands”标志会在项目根目录生成一个 compile_commands.json(编译数据库)文件。该文件由语言程序读取。 服务器 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 相同的严格警告标志编译 C++ 文件(.cpp、.cc、.cxx)。
- 版本 1.6.0 添加了项目初始化(fz -init,创建 .fz.yaml、.fzignore、README.md)、引导加载程序和固件的 bin 格式支持(-format bin)以及配置字段 libs、flags.cc、flags.asm、flags.ld。
- 版本 1.5.0 引入了多个源目录 (source_dirs)、显式文件列表 (source_files)、包含/排除模式、链接器库的 libs 字段、.fzignore 文件以及配置文件的多级合并。
来源: opennet.ru
