[解決済み】RustプログラムがCargoパッケージからメタデータにアクセスする方法は?
2022-04-09 10:04:28
質問
パッケージ内のRustコードから、Cargoパッケージのメタデータ(バージョンなど)にアクセスするにはどうしたらよいでしょうか?私の場合、コマンドラインツールを作っているのですが、標準の
--version
フラグからパッケージのバージョンを読み取るような実装を希望しています。
Cargo.toml
2つの場所で管理する必要がないように。誰かがプログラムからCargoのメタデータにアクセスしたい理由は、他にもあると思います。
解決方法は?
Cargoは、環境変数を通してコンパイラにいくつかのメタデータを渡しますが、そのリストは カーゴのドキュメントページ .
コンパイラの環境は
fill_env
をCargoのコードに追加しました。このコードは以前のバージョンから複雑になっており、変数のリスト全体が動的になりうるため、そこからではわからなくなっています。しかし、少なくとも次のような変数がそこに設定されている(from
ドキュメントにあるリスト
):
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: &str = env!("CARGO_PKG_VERSION");
// ...
println!("MyProgram v{}", VERSION);
Cargo がなくてもプログラムをコンパイルできるようにしたい場合は
option_env!()
:
const VERSION: Option<&str> = option_env!("CARGO_PKG_VERSION");
// ...
println!("MyProgram v{}", VERSION.unwrap_or("unknown"));
関連
-
[解決済み] なぜRustコンパイラは、2つのミュータブル参照がエイリアスできないと仮定してコードを最適化しないのですか?
-
[解決済み】文字列をint型に変換する?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] 同じプロジェクトの別のファイルからモジュールをインクルードする方法は?
-
[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
-
[解決済み] Cargoで複数のバイナリをビルドするにはどうしたらいいですか?
-
[解決済み] Rust の 128 ビット整数 `i128` は 64 ビットシステムでどのように動作するのでしょうか?
-
[解決済み] ローカルの未公開クレートを使うには?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?
-
[解決済み] Stringを&'static strに変換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] rustupでインストールしたRustをアンインストールするには?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み] Rustのユニットテストでprintln! が動作しないのはなぜ?
-
[解決済み】ある値とその値への参照を同じ構造体に格納できないのはなぜですか?
-
[解決済み】RustプログラムがCargoパッケージからメタデータにアクセスする方法は?
-
[解決済み] CopyとCloneの違いは何ですか?
-
[解決済み] クロージャがFn、FnMut、FnOnceを実装するのはどんなとき?
-
[解決済み] Rust の 128 ビット整数 `i128` は 64 ビットシステムでどのように動作するのでしょうか?
-
[解決済み】iterとinto_iterの違いは何ですか?
-
[解決済み] カスタムステップで範囲を反復処理するには?