rust - 在构建期间将符号值传递给 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 编译器中是否有类似的方法可以做到这一点?
解决方案
您想使用此处描述的构建脚本: 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
可执行文件并解析其输出。
推荐阅读
- apache-spark - 从 Ignite 2.8(作为数据库)加载数据时,Spark 数据帧编码错误
- json - 从 JSON 中获取部分结果
- python-3.x - Pandas 错误:传递缺少标签的列表
- r - 如何使用 bind_row(function" 将小标题行绑定在一起
- docker - 如何在使用 Linux 容器的 Windows 10 PC 上运行 printf 命令?
- cgal - 细化 2D Delaunay 网格时保护约束
- bash - 如何使用vim的-c标志?
- sql - select * from [table] where min(date) > 某个日期
- reactjs - 如何连接中间件和 redux-persis
- html - 对齐/环绕图像和文本