#git #build #revision #git-status #build-time #clean #binaries

build build_stamp

在运行时,将构建时间、git版本等信息提供给Rust二进制文件

2个稳定版本

1.0.2 2021年6月6日

#603 in 构建实用工具

每月36次下载
eseb中使用

Apache-2.0

8KB
112

简介

在编译时,将git版本、工作目录是否干净、git状态、构建时间等信息写入生成的文件。然后这些信息对二进制文件可用,例如在版本信息中。

由于与git本身的集成,尽管方式简单,很难在此存储库中提供如何使用的示例。相反,我引用https://github.com/calmofthestorm/eseb作为一个简单的二进制文件,它使用了这个功能。

简而言之,您需要将build_stamp添加到dependenciesbuild-dependencies,在Cargo.toml文件中,如下所示

[dependencies]
build_stamp = "1"

[build-dependencies]
build_stamp = "1"

然后,将以下生成代码的包含项添加到lib.rsmain.rs或其子模块中

include!(concat!(env!("OUT_DIR"), "/generated_stamp.rs"));

然后您可以访问BUILD_STAMP常量。以下示例使用clap定义一个命令行界面,在版本中包含构建信息

let matches = App::new("eseb")
    .name(env!("CARGO_PKG_NAME"))
    .author(env!("CARGO_PKG_AUTHORS"))
    .version(format!("{} ({})", env!("CARGO_PKG_VERSION"), BUILD_STAMP.git_revision_cleanness()).as_ref())

限制

请注意,Cargo可能不会始终在您期望的情况下运行build.sh。例如,提交后,您会期望如果工作目录干净,构建将被标记为干净。但是,如果您没有更改任何文件,Cargo将继续使用之前生成的戳记。

您可以通过手动触摸build.rs或使用(包含的)post commit钩子来修复此问题。可能还有我没有考虑到的其他类似边缘情况。

安全性

我不建议将此基本功能依赖于任何敏感应用程序,例如与证明或完整性验证相关的内容。我创建此功能的目的仅是为了在出现错误或类似情况时更好地理解自己散布的二进制文件。"可能足够好"对我来说已经足够了:-)

没有运行时依赖