2015-01-08 13 views
69

パッケージ内の錆コードから貨物パッケージのメタデータ(バージョンなど)にアクセスするにはどうすればよいですか?私の場合は、標準の--versionフラグを持っているコマンドラインツールをビルドしています。パッケージのバージョンをCargo.tomlから読み取るように実装したいので、2つには維持する必要はありません場所。誰かがプログラムから貨物のメタデータにアクセスしたいと思う他の理由があると私は想像することができます。錆プログラムが貨物パッケージからメタデータにアクセスするにはどうすればよいですか?

答えて

102

Cargoは環境変数を介してコンパイラにいくつかのメタデータを渡します。その一覧はCargo documentation pagesにあります。

貨物コードには、this methodというコンパイラ環境が設定されています。このコードは以前のバージョンよりも複雑になり、変数のリスト全体は動的である可能性があるため、もはやそれから明らかになりません。しかし、少なくとも以下の変数は、(ドキュメントのリストから)が設定されています

CARGO 
CARGO_MANIFEST_DIR 
CARGO_PKG_VERSION_MAJOR 
CARGO_PKG_VERSION_MINOR 
CARGO_PKG_VERSION_PATCH 
CARGO_PKG_VERSION_PRE 
CARGO_PKG_VERSION 
CARGO_PKG_NAME 
CARGO_PKG_DESCRIPTION 
CARGO_PKG_HOMEPAGE 
CARGO_PKG_AUTHORS 
OUT_DIR 

あなたはenv!()マクロを使用して環境変数にアクセスすることができます。あなたのプログラムでも貨物なしでコンパイルしたい場合は、あなたがoption_env!()を使用することができます

const VERSION: &'static str = env!("CARGO_PKG_VERSION"); 

// ... 

println!("MyProgram v{}", VERSION); 

:あなたがこれを行うことができ、あなたのプログラムのバージョン番号を挿入するには

const VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION"); 

// ... 

println!("MyProgram v{}", VERSION.unwrap_or("unknown")); 
5

built -crateは、シリアル化に役立ちますすべての定型文なしで多くの貨物環境。

関連する問題