首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将版本信息从Vergen传递到StructOpt?

如何将版本信息从Vergen传递到StructOpt?
EN

Stack Overflow用户
提问于 2020-04-18 05:42:20
回答 1查看 232关注 0票数 1

我正在尝试设置一个简单的命令行界面程序在生锈,但我希望它显示的版本信息的基础上的git describe,而不是它是什么,它是Cargo.toml文件。

我设置了一些基本的依赖项:

代码语言:javascript
复制
[dependencies]
structopt = "0.3.13"

[build-dependencies]
vergen = "3.1.0"

build.rs文件使用vergen执行提升:

代码语言:javascript
复制
extern crate vergen;

use vergen::{ConstantsFlags, generate_cargo_keys};

fn main() {
    // Setup the flags, toggling off the 'SEMVER_FROM_CARGO_PKG' flag
    let mut flags = ConstantsFlags::all();
    flags.toggle(ConstantsFlags::SEMVER_FROM_CARGO_PKG);

    // Generate the 'cargo:' key output
    generate_cargo_keys(flags).expect("Unable to generate the cargo keys!");
}

结果是可以从我的main.rs中使用的一组环境变量:

代码语言:javascript
复制
fn main() {
    println!("Build SHA: {}", env!("VERGEN_SHA_SHORT"));
}

这将打印我从中构建的正确的git SHA。问题是我不知道如何让StruckOpt使用生成的版本。我本以为这样的东西会起作用:

代码语言:javascript
复制
use structopt::StructOpt;

/// A thing
#[derive(StructOpt)]
struct Cli {
    version: [ version = env!("VERGEN_SEMVER") ],
}

fn main() {
    let args = Cli::from_args();
    println!("Build SHA: {}", env!("VERGEN_SHA_SHORT"));
}

但是,天哪!尽管有这种语法being documented,但它在尝试构建时会抛出一个解析错误:

代码语言:javascript
复制
error: expected one of `!`, `(`, `+`, `::`, `;`, `<`, or `]`, found `=`
 --> src/main.rs:6:24
  |
6 |     version: [ version = env!("VERGEN_SEMVER") ],
  |                        ^ expected one of 7 possible tokens

怎么回事?如何使用StructOpt设置我的命令行界面,以便--version将报告vergen检测到的版本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 20:30:52

手册中的[version = "version"]符号意味着我们需要编写#[structopt(version = "version")]来指定版本号的字符串:

代码语言:javascript
复制
$ cat src/main.rs
use structopt::StructOpt;

#[derive(StructOpt)]
#[structopt(version = env!("VERGEN_SEMVER"))]
struct Cli {}

fn main() {
    let _cli = Cli::from_args();
}

$ env VERGEN_SEMVER=v1.2.3 cargo build
...

$ cargo run -- --version
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/foo --version`
foo v1.2.3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61281183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档