107个版本 (32个重大更改)

0.33.0 2024年8月22日
0.31.1 2024年8月2日
0.30.0 2024年7月22日
0.27.1 2024年3月12日
0.3.19 2020年11月29日

#7 in 构建工具

Download history 22702/week @ 2024-05-03 19006/week @ 2024-05-10 19527/week @ 2024-05-17 18199/week @ 2024-05-24 22254/week @ 2024-05-31 19017/week @ 2024-06-07 21895/week @ 2024-06-14 23470/week @ 2024-06-21 20313/week @ 2024-06-28 19113/week @ 2024-07-05 21527/week @ 2024-07-12 21047/week @ 2024-07-19 27765/week @ 2024-07-26 27860/week @ 2024-08-02 24635/week @ 2024-08-09 26006/week @ 2024-08-16

每月110,462次下载
用于 83 个crate (43直接)

MIT AND Apache-2.0

89KB
1.5K SLoC

shadow-rs: 在您的Rust项目中存储的构建时信息(二进制、库、cdylib、dylib)。

shadow-rs build tool

GitHub Actions Crates.io Docs.rs Download DepStatus Gitter Coverage Status shadow-rs 允许您在运行时访问构建过程和环境的属性,包括

  • Cargo.toml 信息,如项目版本
  • 依赖信息
  • Git信息,如生成构建实体的提交
  • 在编译过程中使用的Rust工具链版本
  • 构建变体,例如 debugrelease
  • ... 更多内容!

您可以使用这个crate来编程检查二进制文件的来源和构建方式。

目前,也支持集成到 wasm。有关详细设置,请参阅链接 example_wasm

build_module

关于缓存的说明

shadow-rs 的构建信息 在构建项目时并不总是重新构建shadow-rs 向Cargo输出几个提示,以便在需要时强制重新构建,但这并不总是有效。您可以通过在构建前运行 cargo clean 来强制更新构建信息,或者使用CI/CD管道工具。更多详情请参阅 https://github.com/baoyachi/shadow-rs/issues/95

示例

  • 查看 example_shadow 以了解如何使用 shadow-rs 在运行时提供构建时信息。
  • 查看 example_shadow_hook 以了解如何使用自定义钩子向 shadow-rs 的输出添加额外信息。
  • 查看 builtin_fn 示例 以了解 shadow-rs 提供的内置函数。

设置

1) 修改 Cargo.toml 字段

按照如下方式修改您的 Cargo.toml

[package]
build = "build.rs"

[dependencies]
shadow-rs = "{latest version}"

[build-dependencies]
shadow-rs = "{latest version}"

关于 build = "build.rs",这是一个可选的添加项,默认情况下,构建指向 build.rs 文件。建议这样使用。但是,如果您的构建脚本文件不是 build.rs,请手动指定它。例如:build = "gen.rs"

2) 创建 build.rs 文件

现在在您的项目根目录中(与 Cargo.toml 相同的目录)添加一个文件 build.rs

fn main() -> shadow_rs::SdResult<()> {
    shadow_rs::new()
}

如果您想排除某些构建常量,可以使用 new_deny 而不是 [new]。

3) 集成 Shadow

在您的主 Rust 文件中(通常是 main.rslib.rs),添加以下内容

use shadow_rs::shadow;

shadow!(build);

shadow! 宏使用给定的标识符创建一个具有该名称的模块。

4) 使用 Shadow 常量

现在您可以使用使用 shadow! 定义的模块来访问构建时信息。

fn main() {
    println!("debug:{}", shadow_rs::is_debug()); // check if this is a debug build. e.g 'true/false'
    println!("branch:{}", shadow_rs::branch()); // get current project branch. e.g 'master/develop'
    println!("tag:{}", shadow_rs::tag()); // get current project tag. e.g 'v1.3.5'
    println!("git_clean:{}", shadow_rs::git_clean()); // get current project clean. e.g 'true/false'
    println!("git_status_file:{}", shadow_rs::git_status_file()); // get current project statue file. e.g '  * examples/builtin_fn.rs (dirty)'

    println!("{}", build::VERSION); //print version const
    println!("{}", build::CLAP_LONG_VERSION); //print CLAP_LONG_VERSION const
    println!("{}", build::BRANCH); //master
    println!("{}", build::SHORT_COMMIT); //8405e28e
    println!("{}", build::COMMIT_HASH); //8405e28e64080a09525a6cf1b07c22fcaf71a5c5
    println!("{}", build::COMMIT_DATE); //2021-08-04 12:34:03 +00:00
    println!("{}", build::COMMIT_AUTHOR); //baoyachi
    println!("{}", build::COMMIT_EMAIL); //[email protected]

    println!("{}", build::BUILD_OS); //macos-x86_64
    println!("{}", build::RUST_VERSION); //rustc 1.45.0 (5c1f21c3b 2020-07-13)
    println!("{}", build::RUST_CHANNEL); //stable-x86_64-apple-darwin (default)
    println!("{}", build::CARGO_VERSION); //cargo 1.45.0 (744bd1fbb 2020-06-15)
    println!("{}", build::PKG_VERSION); //0.3.13
    println!("{}", build::CARGO_TREE); //like command:cargo tree
    println!("{}", build::CARGO_MANIFEST_DIR); // /User/baoyachi/shadow-rs/ |

    println!("{}", build::PROJECT_NAME); //shadow-rs
    println!("{}", build::BUILD_TIME); //2020-08-16 14:50:25
    println!("{}", build::BUILD_RUST_CHANNEL); //debug
    println!("{}", build::GIT_CLEAN); //false
    println!("{}", build::GIT_STATUS_FILE); //* src/lib.rs (dirty)
}

可重现性

此工具包括二进制文件中的当前时间,这通常会使其不可重现。但是,它尊重 SOURCE_DATE_EPOCH 变量 - 如果设置为Unix时间戳,则将覆盖构建时间。

Clap

您还可以使用 shadow-rs 向命令行界面crate(如 clap)提供信息。一个示例可以在 example_shadow 中找到。

常量和函数列表

函数

函数 描述
is_debug() true 如果这是一个带有调试断言的构建。
branch() 构建时的Git分支。
tag() 构建时的当前Git标签。
git_clean() 构建时Git工作树是否为干净状态。
git_status_file() git status 类似输出,例如 * examples/builtin_fn.rs (dirty)

常量

常量 示例
VERSION 3.4.5
CLAP_LONG_VERSION 包含分支、提交哈希、构建时间、Rust版本和工具链渠道的多行字符串
BRANCH master
TAG v1.0.0
SHORT_COMMIT 8405e28e
COMMIT_HASH 8405e28e64080a09525a6cf1b07c22fcaf71a5c5
COMMIT_DATE 2021-08-04 12:34:03 +00:00
COMMIT_DATE_2822 Thu, 24 Jun 2021 21:33:59 +0800
COMMIT_DATE_3339 2021-06-24T21:33:59.972494+08:00
COMMIT_AUTHOR baoyachi
COMMIT_EMAIL [email protected]
BUILD_OS macos-x86_64
BUILD_TARGET x86_64-apple-darwin
BUILD_TARGET_ARCH x86_64
RUST_VERSION rustc 1.45.0 (5c1f21c3b 2020-07-13)
RUST_CHANNEL stable-x86_64-apple-darwin (默认)
CARGO_VERSION cargo 1.45.0 (744bd1fbb 2020-06-15)
PKG_VERSION 0.3.13
CARGO_TREE (cargo tree 输出)
CARGO_MANIFEST_DIR /User/baoyachi/shadow-rs/
PROJECT_NAME shadow-rs
BUILD_TIME 2021-06-24 21:33:59
BUILD_TIME_2822 Thu, 24 Jun 2021 21:33:59 +0800
BUILD_TIME_3339 2021-06-24T15:53:55+08:00
BUILD_RUST_CHANNEL release
GIT_CLEAN true
GIT_STATUS_FILE * src/lib.rs (dirty)

如果您有任何疑问,请创建一个问题,以便我们可以在文档可能不明确的地方进行改进。

使用 shadow-rs 的人

如果您正在使用 shadow-rs,请告诉我!或者,可以考虑在这里留下笔记:[Shadow 用户收集](https://github.com/baoyachi/shadow-rs/issues/19)。

nushell
nushell

starship
starship

exocore
exocore

starship
bagua-core

starship
inclavare-containers

依赖关系

~12–18MB
~313K SLoC