簡體   English   中英

是否可以使用另一個 crate 獲取一個 crate 的 Cargo 環境變量信息?

[英]Is it possible to get the Cargo environment variable information for one crate using another crate?

我有一個提供此功能的板條箱:

pub fn version_info() -> u16 {
    // simplified for minimal example
    env!("CARGO_PKG_VERSION_MAJOR").parse().unwrap()
}

如果我這樣使用庫,我將獲得庫箱的主要版本:

use mylib;

fn main() {
    println!("{}", mylib::version_info());
}

是否有可能獲得“當前”板條箱的主要版本但使用另一個板條箱來獲得它?

CARGO_PKG_VERSION_MAJOR和其他CARGO_*變量由 Cargo 在編譯箱( Cargo 參考)期間設置,因此,例如,您無法在運行時使用std::env::var讀取它。

一種方法是在mylib中編寫一個宏:

macro_rules! version_info {
    () => {
        env!("CARGO_PKG_VERSION_MAJOR").parse::<u32>().unwrap()
    }
}

並在您的板條箱中使用它(注意! ):

use mylib;

fn main() {
    println!("{}", mylib::version_info!());
}

宏在編譯期間得到擴展,並且 Cargo 變量可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM