Rust 사용하는데 유용한 패키지를 소개하고 간단한 샘플 프로그램을 작성합니다.
clap : Command Line Argument Parser for Rust
소개
- 어플리케이션 실행시 옵션을 파싱해주는 패키지입니다.
- Help, Version 등을 자동으로 만들어주고 옵션을 자동으로 파싱해주기 때문에 굉장히 편리합니다.
샘플프로그램
목표
- Cargo pkg name과 version 사용
- short, long 옵션 사용
- 옵션 없이 argument 받기
프로젝트 시작
- clap 추가. feature 로 derive 가 필요합니다.
- feature 에 대한 자세한 내용은 여기 를 참조
1
| $ cargo add clap --features derive
|
프로젝트명
1 2 3 4 5 6 7 8 9
| use clap::Arg; use clap::Command;
fn main() { let m = Command::new(env!("CARGO_PKG_NAME")); .version("1.0.0") .get_matches(); }
|
- 빌드 후 실행해봅니다.
- cargo run 을 사용하지 않습니다. cargo 가 argument를 먹어버립니다.
1 2 3 4 5 6 7 8 9
| % cargo build % ./target/debug/clap_rs --help Usage: clap_rs
Options: -h, --help Print help -V, --version Print version % ./target/debug/clap_rs --version clap_rs 0.1.0
|
- Cargo.toml 의 version 을 “0.1.1” 으로 올려봅니다.
1 2
| % ./target/debug/clap_rs --version clap_rs 0.1.1
|
옵션없는 Arguments
- in_file 로 옵션없이 파일명은 받기로 합니다. 별거없습니다. 코드 보면 바로 알 수 있습니다.
(별거 없는 이 코드 작성하느라 시간 소비 너무 많이 함 ㅠㅠ)
1 2 3 4 5 6 7 8 9 10 11 12 13
| let m = Command::new(env!("CARGO_PKG_NAME")) .version(env!("CARGO_PKG_VERSION")) .arg(Arg::new("in_file")) .get_matches(); let in_file = match m.get_one::<String>("in_file") { Some(one) => one, None => { println!("no in_file"); return; } }; println!("{in_file}");
|
- 실행해봅니다.
–help 에 in_file 에 대한 정보가 나오며
in_file이 있으면 잘 출력해줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| % cargo build warning: unused manifest key: package.about Compiling clap_rs v0.1.1 (/Users/loblue/work/rust-toy-projects/blog/clap_rs) Finished dev [unoptimized + debuginfo] target(s) in 0.14s % ./target/debug/clap_rs --help Usage: clap_rs [in_file]
Arguments: [in_file]
Options: -h, --help Print help -V, --version Print version % ./target/debug/clap_rs no in_file % ./target/debug/clap_rs aaa.txt aaa.txt
|
value 없는 옵션