如何使用rustc-env标志指定环境变量?

xxhby3vn  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(271)

我想设置rustc-env=VAR=VALUE,这样我就可以在代码中使用env::var("VAR")访问它。但是,我不清楚在哪里指定它。我可以在Makefile中设置环境变量VAR吗?

mv1qrgav

mv1qrgav1#

TL;DR

build.rs

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

来源/main.rs

fn main() {
    let var = env!("VAR");
}

documentation that you linked用于Cargo * 构建脚本 *:
build命令指定的Rust文件(相对于包根目录)将在包中编译任何其他内容之前被编译和调用,允许您的Rust代码依赖于构建或生成的工件。默认情况下,Cargo在包根目录中查找"build.rs"文件(即使您没有为build指定值)。使用build = "custom_build_name.rs"指定自定义生成名称,或使用build = false禁用生成脚本的自动检测。
在同一个页面上,有一个部分描述了www.example.com的输出build.rs
构建脚本打印到stdout的所有行都被写入文件[...]任何以cargo:开头的行都直接由Cargo解释。这一行的格式必须是cargo:key=value,如下例所示:

cargo:rustc-env=FOO=bar

然后详细说明rustc-env
rustc-env=VAR=VALUE表示指定的环境变量将被添加到编译器运行的环境中。然后,该值可以由编译后的crate中的env!宏检索。这对于在crate的代码中嵌入额外的元数据非常有用,例如Git HEAD的哈希或持续集成服务器的唯一标识符。
env!是宏。
使用env::var("VAR")访问它
env::var是用来阅读程序运行时设置的环境变量,而不是程序编译时设置的。
参见:

相关问题