5 个版本

0.1.4 2024年2月26日
0.1.3 2024年2月25日
0.1.2 2024年2月25日
0.1.1 2024年2月25日
0.1.0 2024年2月25日

#250开发工具

38 每月下载次数

MIT 许可证

24KB
393

Toke - 基于 TOML 的命令运行器

Toke (TOML Make) 是一个简单的命令运行器,灵感来自 Make,但使用 TOML(Tom's Obvious, Minimal Language)而不是 Makefiles。这个项目是为了娱乐而创建的,作为 Make 的替代品,因为我正在寻找一个简单的命令运行器/构建系统,但不喜欢单的 Makefile 语法。

安装 toke

您可以从 crates.io 获取 toke。

cargo install toke-runner

您也可以使用 cargo 手动编译它。

git clone https://git.olympuslab.net/afonso/toke
cd toke
cargo build --release

可执行文件应位于 target/release/toke

如何使用 toke

Toke 通过读取项目目录中名为 tokefile.toml 的 TOML 文件(或任何类似名称的文件,如 Tokefile.tomltokefile 等)来工作。此文件包含变量、目标和它们相应的命令的定义。

您也可以传入一个文件作为默认文件。

toke -f my_custom_named_toke_file

要运行 toke 目标,只需运行 toke target_name_here

例如

toke build

Toke 会读取 TOML 文件,解析变量,然后执行您提供的目标指定的命令。

它还会检查目标中的依赖循环,以防止无限循环。

示例 Tokefile

[vars]
cc = "gcc"

[targets.build]
vars.cc = "clang"
cmd = "${cc} main.c -o main"

[targets.run]
cmd = "./main arg1 arg2"
deps = ["build"]

由于 TOML 有几种定义相同结构的方式,以下是一个上述 TOML 文件的 JSON 表示,以便更容易理解。

只要它的结构与以下 JSON 相同,您就可以以任何您想要的任何方式编写您的 TOML 文件。

{
  "vars": {
    "cc": "gcc"
  },
  "targets": {
    "build": {
      "vars": {
        "cc": "clang"
      },
      "cmd": "${cc} main.c -o main"
    },
    "run": {
      "cmd": "./main arg1 arg2",
      "deps": ["build"]
    }
  }
}

在这个例子中

我们定义了一个变量 cc,其设置为 "gcc"

我们有两个目标:buildrun

build 目标使用 clang 编译代码。

run 目标运行代码,并带有一些参数。它还依赖于 build 目标。

变量

全局变量

您可以在 vars 表中定义全局变量,如上述示例所示。

局部变量

您可以为每个目标指定局部变量。这些局部变量定义在每个目标部分的 vars 键下。如果局部变量名与全局变量匹配,它将覆盖该特定目标的全局变量值。

以下是一个示例

[vars]
cc = "g++"

[target.target1]
vars.cc = "gcc"
cmd="${cc} ${cflags} main.c -o main"

[target.target2]
vars.cc = "clang"
vars.cflags = "-Wall"
cmd="${cc} ${cflags} main.c -o main"

[target.target3]
vars.cflags = "-O3"
cmd="${cc} ${cflags} main.c -o main"

在这个例子中

target1 使用 gcc 作为 cc 变量,覆盖了全局值。

target2cc 变量指定 clang 并将 -Wall 添加到 cflags

target3 仅将 cflags 设置为 -O3

命令行覆盖

此外,在调用 toke 时,您可以通过命令行参数覆盖全局和局部变量。命令行参数的格式为 VARIABLE=value。当提供时,这些值将覆盖任何相应的全局或局部变量。

以下是一个使用命令行参数的示例

toke build CC=gcc CFLAGS=-O2

在这个例子中

CC=gcc 覆盖了 cc 变量的值。

CFLAGS=-O2 覆盖了 cflags 变量的值。

这些覆盖允许灵活定制。

贡献

欢迎贡献!请随意提交问题或拉取请求以帮助改进 Toke。

许可

本项目采用 MIT 许可证 - 请参阅 LICENSE 文件以获取详细信息。

Toke 是一个旨在通过 TOML 格式简化构建系统的有趣实验。试试看它是否比传统的构建系统(如 Make)更适合您的项目需求!

依赖项

~3–4.5MB
~79K SLoC