Rust程序如何从其Cargo包中访问元数据?

如何从程序包中的Rust代码访问Cargo包的元数据(如版本)? 在我的情况下,我正在构build一个命令行工具,我想有一个标准的--version标志,我想实现从Cargo.toml读取包的版本,所以我不必保持在两个地方。 我可以想象还有其他的原因,有人可能想从程序中访问货物元数据。

Cargo通过环境variables将一些元数据传递给编译器。

我不认为文档中的编译器可以使用环境variables的完整列表,但在货运代码中有类似的东西。 截至2017年1月21日,这里是名单:

 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 

您可以使用env!()macros访问环境variables。 要插入你的程序的版本号,你可以这样做:

 const VERSION: &'static str = env!("CARGO_PKG_VERSION"); // ... println!("MyProgram v{}", VERSION); 

如果你希望程序在没有Cargo的情况下编译,你可以使用option_env!()

 const VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION"); // ... println!("MyProgram v{}", VERSION.unwrap_or("unknown")); 

没有所有的样板, 内置的箱子可以帮助序列化很多货物的环境。