5 个稳定版本
1.1.0 | 2024年5月16日 |
---|---|
1.0.3 | 2024年4月20日 |
1.0.2 | 2023年11月26日 |
1.0.1 | 2023年7月3日 |
1.0.0 | 2023年3月5日 |
#157 in 构建工具
596 个月下载量
用于 2 个包(通过 watchexec-cli)
23KB
302 行
博森
收集详细版本标志的构建信息。
快速开始
在你的 Cargo.toml
[build-dependencies]
bosion = "1.1.0"
在你的 build.rs
fn main() {
bosion::gather();
}
在你的 src/main.rs
include!(env!("BOSION_PATH"));
fn main() {
// default output, like rustc -Vv
println!("{}", Bosion::LONG_VERSION);
// with additional fields
println!("{}", Bosion::long_version_with(&[
("custom data", "value"),
("LLVM version", "15.0.6"),
]));
// enabled features like +feature +an-other
println!("{}", Bosion::CRATE_FEATURE_STRING);
// the raw data
println!("{}", Bosion::GIT_COMMIT_HASH);
println!("{}", Bosion::GIT_COMMIT_SHORTHASH);
println!("{}", Bosion::GIT_COMMIT_DATE);
println!("{}", Bosion::GIT_COMMIT_DATETIME);
println!("{}", Bosion::CRATE_VERSION);
println!("{:?}", Bosion::CRATE_FEATURES);
println!("{}", Bosion::BUILD_DATE);
println!("{}", Bosion::BUILD_DATETIME);
}
高级用法
生成具有公共可见性的结构体
// build.rs
bosion::gather_pub();
自定义输出文件和结构体名称
// build.rs
bosion::gather_to("buildinfo.rs", "Build", /* public? */ false);
输出构建时环境变量而不是源代码
// build.rs
bosion::gather_to_env();
// src/main.rs
fn main() {
println!("{}", env!("BOSION_GIT_COMMIT_HASH"));
println!("{}", env!("BOSION_GIT_COMMIT_SHORTHASH"));
println!("{}", env!("BOSION_GIT_COMMIT_DATE"));
println!("{}", env!("BOSION_GIT_COMMIT_DATETIME"));
println!("{}", env!("BOSION_BUILD_DATE"));
println!("{}", env!("BOSION_BUILD_DATETIME"));
println!("{}", env!("BOSION_CRATE_VERSION"));
println!("{}", env!("BOSION_CRATE_FEATURES")); // comma-separated
}
自定义环境变量前缀
// build.rs
bosion::gather_to_env_with_prefix("MYAPP_");
功能
reproducible
:读取SOURCE_DATE_EPOCH
(默认)。git
:启用收集 git 信息(默认)。std
:启用long_version_with
方法(默认)。具体来说,这是关于下游包的 std 支持,而不是 Bosion 的,Bosion 总是需要 std。
为什么不…?
- bugreport:运行时库,用于错误信息。
- git-testament:使用 git 命令行界面而不是 gitoxide。
- human-panic:运行时库,用于恐慌。
- shadow-rs:使用 libgit2 而不是 gitoxide,git 变化时不重新构建。
- vergen:使用 git 命令行界面而不是 gitoxide。
博森(Bosion)也无需在 build.rs 之外依赖任何内容,并且专门为以多种方式安装的crate而设计,例如通过 cargo install
,从预编译的二进制文件、从git源码或没有git的源码(如tar包)等方式,在各种平台上安装。它的默认输出(使用 clap)几乎与rustc -Vv
完全相同。
示例
示例目录中包含一个实际可运行的基于 clap 的示例,以及其他几个用于集成测试的crate。
以下是Watchexec CLI的输出
watchexec 1.21.1 (5026793 2023-03-05)
commit-hash: 5026793a12ff895edf2dafb92111e7bd1767650e
commit-date: 2023-03-05
build-date: 2023-03-05
release: 1.21.1
features:
为了比较,这里提供 rustc -Vv
rustc 1.67.1 (d5a82bbd2 2023-02-07)
binary: rustc
commit-hash: d5a82bbd26e1ad8b7401f6a718a9c57c96905483
commit-date: 2023-02-07
host: x86_64-unknown-linux-gnu
release: 1.67.1
LLVM version: 15.0.6
依赖关系
~0.7–11MB
~120K SLoC