¿Cómo puede un programa Rust acceder a los metadatos de su paquete Cargo?


150

¿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 construyendo una herramienta de línea de comando que me gustaría tener una --versionbandera estándar , y me gustaría que la implementación lea la versión del paquete Cargo.tomlpara no tener que mantenerla 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.

Respuestas:


219

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 completa fill_enven 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 env!()macro. 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"));

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.