LoginSignup
2
0

Rustにおいて、Cargoからcrateのバージョンなどの情報がビルド時に登録される。
これをenv!のマクロでコードから取得することができる。

ただこの情報はどのcrateの情報なのか気になったので検証してみた。つまり、

  • buildしているbinのcrateの情報
  • env!で呼び出した箇所のcrateの情報

どちらが出るかが気になった。大抵こういう情報はcliツールで呼び出すのでbinのcrateとenv!の情報が同じなので問題にならないが、たまたま呼び出し元のcrateのバージョンを取得したかったので検証することにした。

やったことは単純に呼び出し元のlibのcrateでenv!で取得した値を返す関数を呼び出し先のbinのcrateで呼ぶだけである。

sub-crate/lib.rs
pub fn get_name() -> &'static str {
    env!("CARGO_PKG_NAME")
}
main-crate/main.rs
fn main() {
    println!("{}",sub_crate::get_name());
}

結果は…

sub-crate

だった!なのでenv!で呼び出し元の環境変数を取得できるようだ。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0