rust - una - recuperar metadatos imagenes
¿Cómo puede un programa Rust acceder a los metadatos de su paquete Cargo? (2)
¿Cómo accede a los metadatos de un paquete Cargo (p. Ej., La versión) desde el código Rust del paquete?
En mi caso, estoy creando una herramienta de línea de comando que me gustaría tener un indicador de versión estándar, y me gustaría que la implementación lea la versión del paquete de
Cargo.toml
para no tener que mantenlo en dos lugares.
Me imagino que también hay otras razones por las que alguien podría querer acceder a los metadatos de Cargo desde el programa.
Cargo pasa algunos metadatos al compilador a través de variables de entorno, cuya lista se puede encontrar en las páginas de documentación de Cargo .
El entorno del compilador se llena por
fill_env
en el código de Cargo.
Este código se ha vuelto más complejo desde versiones anteriores, y la lista completa de variables ya no es obvia porque puede ser dinámico.
Sin embargo, al menos las siguientes variables se establecen allí (de la lista en los documentos):
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
Puede acceder a las variables de entorno utilizando la macro
env!()
.
Para insertar el número de versión de su programa, puede hacer esto:
const VERSION: &''static str = env!("CARGO_PKG_VERSION");
// ...
println!("MyProgram v{}", VERSION);
Si desea que su programa se compile incluso sin Cargo, puede usar
option_env!()
:
const VERSION: Option<&''static str> = option_env!("CARGO_PKG_VERSION");
// ...
println!("MyProgram v{}", VERSION.unwrap_or("unknown"));
La caja built ayuda a serializar una gran parte del entorno de Cargo sin toda la caldera.