我从铁锈的命令行工具开始,一开始就撞到了墙上。如果在StructOpt中定义了Opt结构,我可以使用main.rs解析命令行参数,但是由于我希望能够将Opt结构传递到库代码中,所以我在自己的文件中定义它,以便库的其他部分知道它的全部内容。
下面是抛出最少错误的代码的版本,尽管我承认,它主要是通过尝试编译器建议的内容和一些随机的建议来拼凑在一起的,所以它可能是完全错误的。
我得到的构建错误是:
$ cargo run
Compiling basic v0.1.0 (/home/mpalmer/src/action-validator/blobble)
error[E0433]: failed to resolve: maybe a missing crate `structopt`?
--> src/opt.rs:8:5
|
8 | /// Activate debug mode
| ^^^^^^^^^^^^^^^^^^^^^^^ not found in `structopt::clap`
|
help: consider importing this struct
|
3 | use opt::structopt::clap::Arg;
|
For more information about this error, try `rustc --explain E0433`.
error: could not compile `basic` due to previous error
$ cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)
$ rustc --version
rustc 1.56.0 (09c42c458 2021-10-18)(是的,为了以防万一,我尝试过添加use opt::structopt::clap::Arg;,但是错误并没有消失,我收到了一个关于未使用的导入的警告--同时还被告知尝试添加未使用的use,这很有趣)
Cargo.toml
[package]
name = "basic"
version = "0.1.0"
authors = ["User"]
[dependencies]
structopt = "0.3"src/main.rs
extern crate basic;
extern crate structopt;
use basic::Opt;
use structopt::StructOpt;
fn main() {
let opt = Opt::from_args();
println!("{:#?}", opt)
}src/lib.rs
mod opt;
pub use crate::opt::Opt;src/opt.ts
extern crate structopt;
use self::structopt::StructOpt;
#[derive(StructOpt, Debug)]
#[structopt(name = "basic")]
pub struct Opt {
/// Activate debug mode
#[structopt(short,long)]
debug: bool,
}感谢你的建议。
发布于 2021-10-26 08:37:41
工作版本是
Cargo.toml
[package]
name = "basic"
version = "0.1.0"
authors = ["User"]
edition = "2018"
[dependencies]
structopt = "0.3"lib.rs
#[macro_use] extern crate structopt;
use structopt::StructOpt;
pub mod opt;opt.rs
#[derive(StructOpt, Debug)]
#[structopt(name = "basic")]
pub struct Opt {
/// Activate debug mode
#[structopt(short,long)]
debug: bool,
}main.rs
#[macro_use] extern crate structopt;
use structopt::StructOpt;
fn main() {
let opt = basic::opt::Opt::from_args();
println!("{:#?}", opt);
}您需要声明use structopt::StructOpt,因为from_args特性必须在作用域中。
https://stackoverflow.com/questions/69715302
复制相似问题