Jak program Rust może uzyskać dostęp do metadanych z pakietu Cargo?
Jak uzyskać dostęp do metadanych pakietu Cargo (np. wersji) z kodu Rust w pakiecie? W moim przypadku buduję narzędzie wiersza poleceń, które chciałbym mieć standardową flagę --version
i chciałbym, aby implementacja odczytała wersję pakietu z Cargo.toml
, więc nie muszę jej utrzymywać w dwóch miejscach. Mogę sobie wyobrazić, że są inne powody, dla których ktoś może chcieć uzyskać dostęp do Metadanych ładunku z programu.
2 answers
Cargo przekazuje niektóre metadane do kompilatora za pomocą zmiennych środowiskowych, których listę można znaleźć na stronach dokumentacji ładunku .
Środowisko kompilatora jest wypełnione tą metodą w kodzie Cargo. Kod ten stał się bardziej złożony od wcześniejszych wersji, a cała lista zmiennych nie jest już z niego oczywista, ponieważ może być dynamiczna. Są tam jednak ustawione przynajmniej następujące zmienne (z listy w dokumentach):
CARGO
CARGO_MANIFEST_DIR
CARGO_PKG_VERSION_MAJOR
CARGO_PKG_VERSION_MINOR
CARGO_PKG_VERSION_PATCH
CARGO_PKG_VERSION_PRE
CARGO_PKG_VERSION
CARGO_PKG_NAME
CARGO_PKG_DESCRIPTION
CARGO_PKG_HOMEPAGE
CARGO_PKG_AUTHORS
OUT_DIR
Możesz uzyskać dostęp do zmiennych środowiskowych za pomocą env!()
makro. Aby wstawić numer wersji programu możesz to zrobić:
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
// ...
println!("MyProgram v{}", VERSION);
Jeśli chcesz, aby twój program skompilował się nawet bez ładunku, możesz użyć option_env!()
:
const VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION");
// ...
println!("MyProgram v{}", VERSION.unwrap_or("unknown"));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-12 13:44:53
Zbudowany-crate pomaga w serializacji środowiska ładunku bez całej płyty kotła.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-22 12:31:22