工作区目录是否有 Cargo 环境变量?
Is there a Cargo environment variable for the workspace directory?
我在工作区中有以下项目:
Workspacefolder
|
+-- Project A
| |
| +-- build.rs
|
+-- Dep
| |
| +-- test.json
|
+-Cargo.toml
在Project A
中,有build.rs
想要以一种不依赖于平台并且与CI配合良好的方式打开test.json
。
我正在寻找 CARGO_WORKSPACE
环境变量,因为这样我就可以说 Path::new(&workspace_dir).join("/Dep/test.json")
。
不,不适用于与 Rust 1.16.0 捆绑在一起的 Cargo 版本。您可以通过打印构建脚本中的所有环境变量来自己验证这一点:
use std::fs::File;
use std::io::Write;
fn main() {
let mut dump = File::create("/tmp/dump").expect("unable to open");
for (k, v) in std::env::vars() {
writeln!(&mut dump, "{} -> {}", k, v).expect("unable to write")
}
}
在我的机器上,这会产生:
$ sort /tmp/dump | grep CARGO
CARGO_CFG_DEBUG_ASSERTIONS ->
CARGO_CFG_TARGET_ARCH -> x86_64
CARGO_CFG_TARGET_ENDIAN -> little
CARGO_CFG_TARGET_ENV ->
CARGO_CFG_TARGET_FAMILY -> unix
CARGO_CFG_TARGET_OS -> macos
CARGO_CFG_TARGET_POINTER_WIDTH -> 64
CARGO_CFG_UNIX ->
CARGO_HOME -> /Users/shep/.cargo
CARGO_MANIFEST_DIR -> /private/tmp/the-workspace/project-a
CARGO_PKG_AUTHORS -> An Devloper <an.devloper@example.com>
CARGO_PKG_DESCRIPTION ->
CARGO_PKG_HOMEPAGE ->
CARGO_PKG_NAME -> project-a
CARGO_PKG_VERSION -> 0.1.0
CARGO_PKG_VERSION_MAJOR -> 0
CARGO_PKG_VERSION_MINOR -> 1
CARGO_PKG_VERSION_PATCH -> 0
CARGO_PKG_VERSION_PRE ->
我不确定你为什么不能这样做
Path::new(&manifest_dir).join("..").join("Dep").join("test.json")
我已将每个目录拆分为一个单独的调用 — 完全不需要指定目录分隔符以与平台无关。
我在工作区中有以下项目:
Workspacefolder
|
+-- Project A
| |
| +-- build.rs
|
+-- Dep
| |
| +-- test.json
|
+-Cargo.toml
在Project A
中,有build.rs
想要以一种不依赖于平台并且与CI配合良好的方式打开test.json
。
我正在寻找 CARGO_WORKSPACE
环境变量,因为这样我就可以说 Path::new(&workspace_dir).join("/Dep/test.json")
。
不,不适用于与 Rust 1.16.0 捆绑在一起的 Cargo 版本。您可以通过打印构建脚本中的所有环境变量来自己验证这一点:
use std::fs::File;
use std::io::Write;
fn main() {
let mut dump = File::create("/tmp/dump").expect("unable to open");
for (k, v) in std::env::vars() {
writeln!(&mut dump, "{} -> {}", k, v).expect("unable to write")
}
}
在我的机器上,这会产生:
$ sort /tmp/dump | grep CARGO
CARGO_CFG_DEBUG_ASSERTIONS ->
CARGO_CFG_TARGET_ARCH -> x86_64
CARGO_CFG_TARGET_ENDIAN -> little
CARGO_CFG_TARGET_ENV ->
CARGO_CFG_TARGET_FAMILY -> unix
CARGO_CFG_TARGET_OS -> macos
CARGO_CFG_TARGET_POINTER_WIDTH -> 64
CARGO_CFG_UNIX ->
CARGO_HOME -> /Users/shep/.cargo
CARGO_MANIFEST_DIR -> /private/tmp/the-workspace/project-a
CARGO_PKG_AUTHORS -> An Devloper <an.devloper@example.com>
CARGO_PKG_DESCRIPTION ->
CARGO_PKG_HOMEPAGE ->
CARGO_PKG_NAME -> project-a
CARGO_PKG_VERSION -> 0.1.0
CARGO_PKG_VERSION_MAJOR -> 0
CARGO_PKG_VERSION_MINOR -> 1
CARGO_PKG_VERSION_PATCH -> 0
CARGO_PKG_VERSION_PRE ->
我不确定你为什么不能这样做
Path::new(&manifest_dir).join("..").join("Dep").join("test.json")
我已将每个目录拆分为一个单独的调用 — 完全不需要指定目录分隔符以与平台无关。