1 个不稳定版本
0.1.0 | 2024 年 3 月 27 日 |
---|
#407 in 开发工具
25KB
480 代码行
Coyote 构建系统
用 Rust 编写的通用开发构建系统 🦀
Coyote 是一个旨在清晰易用的构建系统,作为编写项目构建系统的工具,使编写项目构建系统变得更容易(但牺牲了扩展性)
项目结构
假设你正在处理一个项目,该项目将文件 hello.c
构建为可执行文件 hello
-要将此打包到 coyote 构建JSON中,你只需做以下事情
-
定义项目名称
对于任何 严肃 的项目都是绝对必要的,因此对于这个,我选择
hello
(我知道,有创意!)为此,你只需要以下JSON行:
"project_name": "hello"
-就是这么简单! -
变量
为了有一个项目,你必须有依赖项和别名,否则你的构建文件会难以阅读!这可以在
coyote.json
文件中轻松完成,使用以下行标记变量列表的开始(非常直观)"variables": { ... }
例如,假设你想将项目的输出文件名存储为变量。这可以通过以下方式轻松完成
"variables": { "output": "hello" }
此外,如果你想在另一个变量中引用变量,你只需将引用变量的名称放在一对
{}
中。如果你希望使用{
进行其他用途,你还可以通过转义操作符{{
来实现。注意:变量将按字母数字顺序评估,而不管它们指定的顺序如何。
-
可执行文件
coyote.json
可以指定多个可执行 '目标',可以依次构建。每个 '目标' 也有一组它在执行时运行的命令。但是,就我们的目的而言,我们不需要多个目标或多个命令。一个简单的gcc hello.c -o hello
就足够了。每个可执行文件都在 JSON 的
"executables": [ ... ]
块中指定,并以列表的形式指定。每个可执行文件都是一个对象,其结构如下"executables": [ { "target": "hello", "commands": [ { ... }, { ... } ] } ]
-
命令
每个可执行文件都有一组按指定顺序运行的命令,定义了一个命令和一组参数,例如构建
hello
的命令可能看起来像这样{ "command": "gcc", "arguments": [ "hello.c", "-o{target}" ] }
但是等等!还有更多!
命令还可以可选地指定一个
run_if
列表,这作为一个单一的条件(以及一些参数)来指定给 coyote 是否应该运行该命令或不应运行。例如,如果您不想浪费时间重新编译未更改的代码,您可以使用modified
条件以及一个文件名,如下所示{ "command": "gcc", "arguments": [ "hello.c", "-o{target}" ], "run_if": [ "modified", "hello.c" ] }
此命令仅在检测到
main.c
已更改时才会运行! -
关于
run_if
的更多信息目前,只有一个
run_if
指定符 -modified
。它所做的只是检查文件是否已更改。 -
综合起来
这是我们的最终
coyote.json
,用于使用gcc
构建单个文件{ "project_name": "hello", "variables": { "target": "hello" }, "executables": [ { "target": "main", "commands": [ { "command": "gcc", "arguments": [ "-O3", "-o{target}" ], "run_if": [ "modified", "hello.c" ] } ] } ] }
其他内容
Coyote 还支持使用单个命令行参数构建的多个 '配方'。这些通过加载不同的 coyote.json
来实现,其中文件名格式如下 coyote-[recipe].json
Coyote 还支持以下命令行选项
-r
,--rebuild
:忽略所有run_if
语句,并从头开始构建整个项目
依赖关系
~3–11MB
~105K SLoC