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