31 个版本
0.4.8 | 2023年12月7日 |
---|---|
0.4.7 | 2023年10月17日 |
0.4.6 | 2023年7月11日 |
0.4.4 | 2022年11月16日 |
0.3.1 | 2022年2月5日 |
#1 in #outputs
每月312次下载
140KB
4K SLoC
Turtle
Ninja-兼容的高级编程语言构建系统,用 Rust 编写
目标
- Rust 中 Ninja 构建系统的安全(无
unsafe
)和快速实现 - 适度、全面且可定制的构建/错误输出
- Turtle 从不显示对最终用户来说不可理解的信息。
- 这对于不了解编译器和构建系统如何工作的高级编程语言用户来说非常重要。
Turtle 最初是为 Pen 编程语言 编写的。因此,我们目前只支持动态依赖项,但不支持 C/C++ 头文件依赖项。欢迎您的贡献!😄
安装
cargo install turtle-build
使用方法
turtle
有关更多信息,请参阅 turtle --help
。
功能
- Ninja-兼容的构建文件语法和命令行选项 🥷
- 基于内容哈希的重建
- 仅描述的输出
- Turtle 从不显示构建规则的命令,而只显示描述,因为前者对最终用户来说难以理解。
- 源映射
- Turtle 将错误消息中的输出映射到在
build
指令中定义的srcdep
变量所指定的源文件名,以便用户可以理解。
- Turtle 将错误消息中的输出映射到在
--log-prefix
选项- 它更改附加到 Turtle 自身每一行日志的日志前缀(例如,对于
my-build-system: build failed
的日志,可以使用--log-prefix my-build-system
)。
- 它更改附加到 Turtle 自身每一行日志的日志前缀(例如,对于
--quiet
选项- 它在预期的构建错误上抑制 Turtle 自身的错误消息。当您将 Turtle 作为某些高级构建系统的子进程启动时,这很有用。
- 控制台输出处理类似于 Rust 的 Cargo
- 海龟在日志底部显示了正在运行的构建作业的输出。因此,跟踪构建过程中发生的情况很容易。
与Ninja兼容
海龟旨在支持Ninja构建文件的完整语法。它也支持基本的命令行参数,但不会实现所有原始选项(例如-t
选项)。
语法
-
build
语句- 显式输出
- 显式输入
- 隐式输出
- 隐式输入
- 仅顺序输入
-
phony
规则
-
rule
语句 -
default
语句 -
include
语句 -
subninja
语句 -
pool
语句 - 全局变量
- 构建局部变量
-
in
和out
特殊变量
命令行参数
-
-f
自定义构建文件选项 -
-j
作业限制选项 -
-k
继续构建选项 -
-C
更改目录选项
其他
- 循环构建依赖检测
- 循环构建文件依赖检测
-
builddir
特殊变量 - 动态依赖
- 隐式输入
- 隐式输出
- 循环构建依赖检测
- C/C++头文件依赖
-
depfile
选项 -
deps
选项
-
- Windows支持
技术说明
海龟与传统构建系统不同,值得注意的是,它通过Rust中未来的生态系统和无栈协程自然地解决并行构建,其中您并行修改图结构,并将其减少到解决方案。
以下是海龟中并行构建的工作方式
- 海龟为默认目标的构建生成未来。
- 根据构建的配置,它们生成更多的未来或解决它们自己的未来。
- 如果它们需要首先构建某些输入目标,它们将并行生成所有这些输入目标的构建。
- 这些未来由Rust中的异步运行时调度和并行运行。
- 当所有未来都解决时,构建完成。
目前,海龟仅使用拓扑排序算法来检测循环依赖,但不用于构建作业的调度。
海龟由以下项目和其他项目支持!
类似的项目
许可
双重许可下MIT和Apache 2.0。
依赖关系
~11–20MB
~251K SLoC