如何在Rust程序中获取Cargo包的元数据(版本、名称、描述)?
大家好!我正在用Rust编写一个CLI工具,希望在运行时使用`--version`标志输出程序版本。但我不想在代码中硬编码字符串"0.1.0"——这很不方便,版本应该只在`Cargo.toml`中修改。
问题:我无法理解如何从Rust程序本身读取`Cargo.toml`中的数据。我尝试使用`std::fs::read_to_string("Cargo.toml")`,但这只在程序从项目根目录运行时有效,而通过`cargo install`安装后,`Cargo.toml`文件并不在二进制文件旁边。
这是我当前的代码,当然不能正常工作:
```rust
fn main() {
let version = std::fs::read_to_string("Cargo.toml")
.ok()
.and_then(|s| {
s.lines()
.find(|l| l.starts_with("version"))
.map(|l| l.trim().trim_start_matches("version = \"").trim_end_matches('"'))
})
.unwrap_or("unknown");
println!("MyApp v{}", version);
}
```
它输出"un