2017-04-24 78 views
0

我有以下的項目工作區:工作區目錄是否有貨運環境變量?

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")

回答

1

不,不是版本的貨物捆綁鏽1.16.0。您可以通過打印出所有的環境變量在生成腳本自己驗證這一點:

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 <[email protected]> 
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 -> 

我不知道爲什麼你可以「T只是做

Path::new(&manifest_dir).join("..").join("Dep").join("test.json") 

我已經分裂每個目錄到一個單獨的呼叫 - 避免了需要指定的目錄分離器是平臺不可知的。

+0

這是,我最終做了什麼。我只想驗證是否有一種更簡潔,更簡單的方式來實現這一點。 –

+0

@DanielFath如果它是你認爲有用的東西,也許其他人也會。您可以將貨物提交給Cargo以添加它!^_^ – Shepmaster

+0

已經成爲一個問題,[2小時前](https://github.com/rust-lang/cargo/issues/3946)我會考慮那個公關。 –