1 个不稳定版本

0.1.0 2024 年 3 月 27 日

#407 in 开发工具

MIT/Apache

25KB
480 代码行

Coyote 构建系统

用 Rust 编写的通用开发构建系统 🦀

Coyote 是一个旨在清晰易用的构建系统,作为编写项目构建系统的工具,使编写项目构建系统变得更容易(但牺牲了扩展性)

项目结构

假设你正在处理一个项目,该项目将文件 hello.c 构建为可执行文件 hello -要将此打包到 coyote 构建JSON中,你只需做以下事情

  1. 定义项目名称

    对于任何 严肃 的项目都是绝对必要的,因此对于这个,我选择 hello(我知道,有创意!)

    为此,你只需要以下JSON行: "project_name": "hello" -就是这么简单!

  2. 变量

    为了有一个项目,你必须有依赖项和别名,否则你的构建文件会难以阅读!这可以在 coyote.json 文件中轻松完成,使用以下行标记变量列表的开始(非常直观) "variables": { ... }

    例如,假设你想将项目的输出文件名存储为变量。这可以通过以下方式轻松完成

    "variables": {
        "output": "hello"
    }
    

    此外,如果你想在另一个变量中引用变量,你只需将引用变量的名称放在一对 {} 中。如果你希望使用 { 进行其他用途,你还可以通过转义操作符 {{ 来实现。

    注意:变量将按字母数字顺序评估,而不管它们指定的顺序如何。

  3. 可执行文件

    coyote.json 可以指定多个可执行 '目标',可以依次构建。每个 '目标' 也有一组它在执行时运行的命令。但是,就我们的目的而言,我们不需要多个目标或多个命令。一个简单的 gcc hello.c -o hello 就足够了。

    每个可执行文件都在 JSON 的 "executables": [ ... ] 块中指定,并以列表的形式指定。每个可执行文件都是一个对象,其结构如下

    "executables": [
        {
            "target": "hello",
            "commands": [
                { ... },
                { ... }
            ]
        }
    ]
    
  4. 命令

    每个可执行文件都有一组按指定顺序运行的命令,定义了一个命令和一组参数,例如构建 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 已更改时才会运行!

  5. 关于 run_if 的更多信息

    目前,只有一个 run_if 指定符 - modified。它所做的只是检查文件是否已更改。

  6. 综合起来

    这是我们的最终 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