首页 > 解决方案 > 在构建期间将符号值传递给 Rust 编译器

问题描述

在我的 Go 构建中,我通常包括以下几行:

buildInfo="`date -u '+%Y-%m-%dT%TZ'`|`git describe --always --long`|`git tag | tail -1`"
go build -ldflags "-X main.buildInfo=${buildInfo} -s -w" ./cmd/...

然后在 中main,我解析buildInfo为三个单独的值,这些值可以与使用消息一起显示。这让我可以看到可执行文件的编译时间戳、git 哈希和 semver 编号。

在 Rust 编译器中是否有类似的方法可以做到这一点?

标签: rusttimestamp

解决方案


您想使用此处描述的构建脚本: https ://doc.rust-lang.org/cargo/reference/build-scripts.html

您需要编写一个build.rs位于 crate 根目录的 Rust 文件,该文件将在构建 crate 之前由 cargo 编译和运行,您可以在其中输出某些字符串,这些字符串反过来将由 Cargo 解释以驱动编译。

例如,如果您编写包含以下内容的构建脚本:

fn main() {
    println!("cargo:rustc-env=BUILD_INFO=VALUE");
}

然后你项目中的源文件可以BUILD_INFO像这样使用变量:

let buildInfo = env!("BUILD_INFO");

在您的情况下,构建脚本可以例如确定当前时间戳,或调用git可执行文件并解析其输出。


推荐阅读