#build-system #projects #task #freeform

构建 tinyrick

一个自由的 Rust 构建系统

12 个版本

使用旧的 Rust 2015

0.0.14 2024年1月15日
0.0.13 2024年1月5日
0.0.11 2023年4月5日
0.0.9 2018年11月1日
0.0.8 2018年10月31日

#66 in 构建工具

Download history 41/week @ 2024-04-02 83/week @ 2024-04-09 3/week @ 2024-04-16 8/week @ 2024-04-23 9/week @ 2024-05-07 66/week @ 2024-05-14 78/week @ 2024-05-21 134/week @ 2024-05-28 96/week @ 2024-06-04 83/week @ 2024-06-11 76/week @ 2024-06-18 71/week @ 2024-06-25 60/week @ 2024-07-02 69/week @ 2024-07-09 6/week @ 2024-07-16

220 每月下载量
用于 5 crates

BSD-2-Clause

17KB
221

tinyrick: 一个自由的 Rust 构建系统

       .---.              ^
     o{__ω__ o{          ^0^  -Let me out!
~~ ( // *|* \xx\)      xx`|'
        = =  xxxx&x      ' `

示例

$ cd example

$ tinyrick
running 1 test
test smoketest ... ok

$ tinyrick -h
Usage: tinyrick [options]

Options:
    -l, --list          list available tasks
    -h, --help          print usage info
    -v, --version       print version info

关于

我是小里克(TINYRICK!),我构建 Rust 项目。使用小里克,你可以像项目的其他 Rust 代码一样配置构建。或者继续用 make 挑剔,随你。

看看我的裤子!小里克!你以为我的裤子是通码的吗?不,当然不是!所以选择适合你的裤子。选择一个 tinyrick.rs 来适应你的工作流程。任务依赖树,趁热拿走!段错误,趁它们还没来。更智能,更光滑,更快,更奇特。

不要在壳中,在库中。这样你的构建更可移植。小里克小里克小里克。如果你仔细看,最后一个句号实际上是一个 微型 rick 以 ASCII 编码呈现;甚至更小的 tinyrick!

CRATE

https://crates.io/crates/tinyrick

API 文档

https://docs.rs/tinyrick/latest/tinyrick/

许可证

BSD-2-Clause

运行时要求

  • ASDF 0.10(在安装每个 Rust 应用程序二进制文件后运行 asdf reshim
  • direnv 2
  • cargo-cache

设置

tinyrick.rs

在 Rust 项目的顶层目录中编写一些任务的 tinyrick.rs 构建配置脚本

fn banner() {
    println!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"));
}

fn test() {
    tinyrick::exec!("cargo", &["test"]);
}

fn build() {
    tinyrick::deps(test);
    tinyrick::exec!("cargo", &["build", "--release"]);
}

fn publish() {
    tinyrick::exec!("cargo", &["publish"]);
}

fn clean() {
    tinyrick::exec!("cargo", &["clean"]);
}

fn main() {
    tinyrick::phony!(clean);
    tinyrick::wubba_lubba_dub_dub!(build; banner, test, publish, clean);
}

Cargo.toml

现在,通过配置你的顶层 Cargo.toml 来连接 tinyrick 命令行界面

[package]
name = "derpmobile"
description = "hyperadvanced derpmobiles"
version = "3.1.4"

[dependencies]
tinyrick = { version = "0.0.14", optional = true }

[features]
letmeout = ["tinyrick"]

[[bin]]
name = "tinyrick"
path = "tinyrick.rs"
required-features = ["letmeout"]

在你的项目目录中启动一个终端会话。安装并运行 tinyrick 工具

$ cargo install tinyrick
$ tinyrick

看看他的表现...我希望小里克正在练习良好的礼貌 :P

当你运行时会发生什么

  • tinyrick banner?
  • tinyrick test?
  • tinyrick clean?
  • tinyrick build?
  • tinyrick-h?
  • tinyrick--list?
  • 详细=1tinyrick build?

如果你运行 VERBOSE=1 tinyrick build build build,我敢打赌月亮会爆炸!(抓紧你的裤子~)

总结

我的裤子在哪里?让我们分解到目前为止的代码

  • fn name() { ... } 声明了一个名为 name 的任务。
  • deps(requirement) 缓存了对任务 requirement 的依赖。
  • exec!(...) 启动原始的 shell 命令进程。
  • VERBOSE=1 在处理过程中启用命令字符串输出。
  • phony!(...) 禁用某些任务的依赖缓存。
  • wubba_lubba_dub_dub!(default; ...)default 任务和其他一些任务暴露给 tinyrick 命令行。
  • letmeout 是一个功能门,这样在你 tinyrick publish 时,既不是 tinyrick 包,也不是你的 tinyrick 可执行文件会逃离你的 Rust 包。

不要使用 shell 命令!1

尽管 tinyrick 库提供了几个执行 shell 命令的极其方便的宏,但这并不意味着你应该总是使用 shell。绝不,伙计!

尽可能使用常规 Rust 代码,就像在 banner() 示例中一样。有数不清的crates(Rust 包),所以你可以充分利用它们!

贡献

有关开发 tinyrick 本身的更多详细信息,请参阅 DEVELOPMENT.md

另请参阅

  • 受 Go 项目优秀的 mage 构建系统的启发
  • bb,一个 (g)awk 项目的构建系统
  • cargo 自定义构建脚本,主要用于从其他语言生成 Rust 源文件
  • cmake 用于 C/C++ 项目
  • dale 构建 D 项目
  • GNU autotools,一个 Linux C/C++ 项目的构建系统
  • Gradle,一个 JVM 项目的构建系统
  • invoke,一个 Python 任务运行器
  • jelly,一个 JSON 任务运行器
  • lake,一个 Lua 任务运行器
  • Leiningen + lein-exec,一个 Clojure 任务运行器
  • lichen,一个 sed 任务运行器
  • POSIX make,C/C++ 和其他各种软件项目的任务运行器标准
  • mian,(Chicken) Scheme Lisp 的任务运行器
  • Rake,Ruby 项目的任务运行器
  • Rebar3,Erlang 项目的构建系统
  • rez 构建 C/C++ 项目
  • sbt,Scala 项目的构建系统
  • Shake,Haskell 项目的任务运行器
  • yao,一个用于Common LISP项目的任务执行器

更多示例

  • 包含的示例项目提供了如何使用tinyrick构建项目的完整演示。
  • 更多实际示例,请参阅ios7crypt-rs,这是一个用于美味地愚蠢密码加密的小型模块库和命令行工具。
  • tinyrick_extras将一些常见的工作流任务定义为普通的Rust函数,你可以像其他Rust crate一样将它们添加到tinyrick中。

依赖项

约465KB