在生成期间将符号值传递给Rust编译器

在生成期间将符号值传递给Rust编译器,rust,timestamp,Rust,Timestamp,在我的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哈希和semv

在我的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编译器中有类似的方法吗?

您想使用构建脚本,如下所述:

您需要编写一个位于板条箱根目录下的
build.rs
Rust文件,该文件将在构建板条箱之前由cargo编译和运行,在该文件中,您可以输出某些字符串,这些字符串将依次由cargo解释以驱动编译

例如,如果使用以下内容编写生成脚本:

fn main() {
    println!("cargo:rustc-env=BUILD_INFO=VALUE");
}
然后,项目中的源文件可以使用
BUILD\u INFO
变量,如下所示:

let buildInfo = env!("BUILD_INFO");

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

此问题或答案的任何方面都与SemVer无关。实际上,如果git标记包含SemVer,则与SemVer无关。