RustプログラムはどのようにしてCargoパッケージのメタデータにアクセスできますか?


150

パッケージ内のRustコードからCargoパッケージのメタデータ(バージョンなど)にどのようにアクセスしますか?私の場合は、標準の--versionフラグを設定したいコマンドラインツールを構築しています。実装からパッケージのバージョンを読み取っCargo.tomlて、2つの場所で維持する必要がないようにしたいと考えています。プログラムからCargoメタデータにアクセスする理由が他にもあると思います。

回答:


219

Cargoはいくつかのメタデータを環境変数を通じてコン​​パイラーに渡します。環境変数のリストはCargoのドキュメントページにあります

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

CARGO_MANIFEST_DIR
CARGO_PKG_AUTHORS
CARGO_PKG_DESCRIPTION
CARGO_PKG_HOMEPAGE
CARGO_PKG_NAME
CARGO_PKG_REPOSITORY
CARGO_PKG_VERSION
CARGO_PKG_VERSION_MAJOR
CARGO_PKG_VERSION_MINOR
CARGO_PKG_VERSION_PATCH
CARGO_PKG_VERSION_PRE

env!()マクロを使用して環境変数にアクセスできます。プログラムのバージョン番号を挿入するには、次のようにします。

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

// ...

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

Cargoがなくてもプログラムをコンパイルしたい場合は、以下を使用できますoption_env!()

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

// ...

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.