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!
で呼び出し元の環境変数を取得できるようだ。