探索下一代构建工具:Knit 🧶
项目介绍
Knit 是一个灵感来源于 Make 和 Plan9 Mk 的新型构建工具,它将 Make 样式的规则定义与 Lua 程序的灵活性结合在一起。通过 Lua,你可以创建可复用的构建模块,为各种源代码构建提供便利。对于熟悉 Make 的开发者来说,学习 Knit 将变得非常容易。
Knit 的独特之处在于其更强大的增量构建能力。它会自动追踪更多构建信息,如规则的配方(recipe)变化,以便在变量更改时自动重建受影响的规则。此外,它还能动态跳过那些确定不会改变的步骤,即使前面的依赖项已更新。
项目技术分析
- 嵌入式 Lua 定制:借助 Lua,Knit 允许编写可重用的构建库,增强了构建脚本的表达性。
- 基于规则的语言:灵感源自 Make 和 Plan9 Mk,Knit 提供了易于理解的规则语法。
- 子构建支持:无需使用
make -C
进行子构建,所有内容都由根 Knitfile 轨迹跟踪,但依然能实现目录特定规则。 - 智能文件哈希检测:通过文件哈希值判断是否过期,甚至能在变更未影响目标的情况下避免不必要的重建。
此外,Knit 采用 Lua 变量而非 Make 的 $^
, $@
, $*
等,简化了命名,并支持虚拟规则和多输出规则。
应用场景
任何需要高效、灵活构建流程的项目都可以受益于 Knit。特别适用于:
- 使用多种编程语言的大型项目,需要定制化构建规则。
- 希望避免频繁的全量构建以提高开发效率的情况。
- 需要跨平台构建或者有特殊构建需求的项目。
项目特点
- 易学易用:对于 Make 用户来说,规则语法简单直观。
- 强大定制:利用 Lua 实现复杂逻辑,创建自定义构建模块。
- 智能增量构建:通过文件哈希和规则变更检测,提高构建速度。
- 无碎片化:通过内置的子构建支持,保持构建的一致性和完整性。
示例体验
以下是一个简单的 Knitfile 示例,用于编译一个 C 项目:
return b{
$ hello: hello.o
cc -O2 $input -o $output
$ %.o: %.c
cc -O2 -c $input -o $output
}
获取并开始使用 Knit
预编译的二进制文件可以从发布页面获取,或使用eget自动化安装。开发者还可以从源码编译,需要 Go 1.19 或更高版本。
让我们一起探索 Knit 如何提升您的构建效率,构建更加出色的项目吧!
更多信息
阅读项目文档以了解更多详细信息和示例,以及如何安装和使用Knit。如果您有任何反馈或疑问,请开启讨论,一起完善这个工具。