Come può un programma Rust accedere ai metadati dal suo pacchetto Cargo?


150

Come si accede ai metadati di un pacchetto Cargo (ad es. Versione) dal codice Rust nel pacchetto? Nel mio caso, sto creando uno strumento da riga di comando che mi piacerebbe avere un --versionflag standard e mi piacerebbe che l'implementazione leggesse la versione del pacchetto in Cargo.tomlmodo da non doverlo mantenere in due punti. Posso immaginare che ci siano altri motivi per cui qualcuno potrebbe voler accedere ai metadati del carico anche dal programma.

Risposte:


220

Cargo trasmette alcuni metadati al compilatore attraverso le variabili di ambiente, un elenco dei quali è disponibile nelle pagine della documentazione Cargo .

L'ambiente del compilatore è popolato da fill_envnel codice Cargo. Questo codice è diventato più complesso dalle versioni precedenti e l'intero elenco di variabili non è più evidente da esso perché può essere dinamico. Tuttavia, almeno le seguenti variabili sono impostate lì (dall'elenco nei documenti):

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

È possibile accedere alle variabili di ambiente utilizzando la env!()macro. Per inserire il numero di versione del tuo programma puoi fare questo:

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

// ...

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

Se vuoi compilare il tuo programma anche senza Cargo, puoi usare option_env!():

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

// ...

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.