2017-04-24 18 views
0

は私がワークスペースに以下のプロジェクトがあります。ワークスペースディレクトリのCargo環境変数はありますか?

Workspacefolder 
| 
+-- Project A 
| | 
| +-- build.rs 
| 
+-- Dep 
| | 
| +-- test.json 
| 
+-Cargo.toml 

Project Aでは、プラットフォームに依存しており、それはCIとうまく動作しない方法でtest.jsonを開きたいbuild.rsあります。

Path::new(&workspace_dir).join("/Dep/test.json")と言うことができるので、私はCARGO_WORKSPACEという環境変数を探しています。

答えて

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

なぜあなたができる私はわからないんだけどちょうど

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

私は別の呼び出しに分割しました - ディレクトリを指定する必要性を避けるセパレータはプラットフォームに依存しないものとする。

+0

これは、私が最終的にしたことです。私はちょうどこれを達成するよりクリーンで、よりハッキリのない方法があることを確認したいと思った。 –

+0

@DanielFathあなたが役に立つと思っているものなら、おそらく他の人もそうです。あなたはそれを追加するために貨物にPRを提出することができます!^_^ – Shepmaster

+0

すでに2時間前に問題がありました(https://github.com/rust-lang/cargo/issues/3946)私はそのPRについて考えます。 –

関連する問題