如何使用 Cargo 设置环境变量?

man*_*eep 22 rust rust-cargo

我在 Cargo.toml 中列出了一个需要特定环境变量集的依赖项。我可以export FOO=bar在 bash中运行并且一切正常,但是对于我的生活,我无法弄清楚如何在编译时使用 Cargo 导出这个环境变量。我试过设置环境变量build.rs通过std::envCommandprintln!所有没有效果:

// build.rs
fn main() {
    Command::new("ls")
        .env("FOO", "bar")
        .spawn()
        .expect("ls command failed to start");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
    std::env::set_var("FOO", "bar");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
    println!("cargo:rustc-env=FOO=bar");
}
Run Code Online (Sandbox Code Playgroud)

Pâr*_*ady 13

利用夜间货运,您可以使用配置-ENV通过功能[env]的部分config.toml。这与 不是同一个文件Cargo.toml,但仍然可以为每个项目设置:

[env]
FOO = "bar"
PATH_TO_SOME_TOOL = { value = "bin/tool", relative = true }
USERNAME = { value = "test_user", force = true }
Run Code Online (Sandbox Code Playgroud)

本节中设置的环境变量将应用于 Cargo 执行的任何进程的环境。

relative表示该变量表示相对于.cargo/包含config.toml文件的目录的目录位置的路径。

force 意味着该变量可以覆盖现有的环境变量。

有关此功能历史记录的更多信息,请参阅相关的 GitHub 问题

  • 这些是为 Cargo 执行的进程设置的环境变量,_不是_用于最终的二进制文件!例如,这对于构建 C 依赖项很有用。请参阅 /sf/ask/3613514971/ 以检查如何实现您想要的。 (3认同)
  • 如果设置了 --release ,是否可以设置不同的环境变量? (2认同)