3个不稳定版本
0.2.1 | 2024年7月16日 |
---|---|
0.2.0 | 2024年7月15日 |
0.1.0 | 2024年7月10日 |
#49 in 模板引擎
47KB
1K SLoC
Zinn
Zinn(来自德语“Sinn machen”,意为“有意义”)是一个类似于 make 的构建工具,但基于 YAML 和 Handlebars 模板语言。
它支持 作业参数、文件跟踪 以及一个可视化显示当前进度的命令行界面。示例代码可在 ./examples/cproj
中找到。
请注意:这目前是我个人的一个实验性项目,不适合用于生产。文件格式可能随时更改。
Zinnfile
Zinnfile描述了应该运行的作业。它使用 YAML 标记语言 和 Handlebars 模板语言 来描述应该运行的作业。默认情况下,Zinn会查找名为 zinn.yaml
的文件,但也可以手动指定路径。
一个简单的C项目的基本Zinnfile可能如下所示
constants:
CC: gcc
CFLAGS: -std=c11 -pedantic -Wall -Werror -D_XOPEN_SOURCE=700
jobs:
object:
args: [path]
inputs: "{{path}}"
outputs: "{{subst path '.c' '.o'}}"
run: "{{CC}} {{CFLAGS}} -c {{path}}"
binary:
requires:
- job: object
with:
path: math.c
- job: object
with:
path: output.c
- job: object
with:
path: main.c
inputs: math.c output.c main.c
outputs: program
run: "{{CC}} {{CFLAGS}} -o program"
clean:
run: |
rm -rf *.o
rm -rf program
default:
requires:
- job: binary
有关可用选项的更多信息,请参阅 源文档。
模板函数
Zinn为模板语言提供了自定义函数
cat <s1> <s2>...
:连接所有参数joinlines <var>
:将行连接起来,并用正则空白字符连接它们lst <s1> <s2>...
:从所有输入参数创建空格分隔的列表lst-prefix <prefix> <list>
:向空格分隔列表中的每个元素添加前缀lst-re <list> <pattern> <replacement>
:对空格分隔的列表中的每个项目应用正则表达式替换操作lst-suffix <prefix> <list>
:向空格分隔的列表中的每个元素添加后缀lst-without <list> <remove1> <remove2>...
:创建一个不包含某些元素的空格分隔列表的副本re <base> <pattern> <replacement>
:对输入字符串应用正则表达式替换操作shell <cmd>
:从shell命令的输出创建字符串subst <base> <pattern> <replacement>
:替换所有子字符串的出现
Nix 支持
如果 Nix 已安装 并且 Flakes 已启用,则可以在 Zinnfile 的 nix.packages
字段中指定构建依赖项。然后所有作业都在包含这些包的环境中运行。可以使用 nix.nixpkgs
字段更改默认的 nixpkgs flake 引用。
请注意,Flakes 目前是 Nix 中的一个不稳定功能,因此此功能也应被视为不稳定。
安装
您可以直接从 crates.io 安装 Zinn
依赖关系
~6–14MB
~174K SLoC