Rust Package : clap

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 없는 옵션

Share