Rust, Package

Jeonghak Cho·2025년 1월 1일

Rust

목록 보기
4/13

Package

Package 는 여러 Crate를 한데 모은 것이다. Cargo 에 의해 패키지가 관리된다.
cargo new myapp 명령으로 자동 생성되는 Crate는 다음과 같다.

vagrant@master:~/samples/myapp$ cat src/main.rs
fn main() {
    println!("Hello, world!");
}

이 상태에서 src/lib.rs를 추가하여 두 개의 Crate를 가지는 Package를 구성할 수 있다.

vagrant@master:~/samples$ cd myapp
vagrant@master:~/samples/myapp$ vi src/lib.rs

pub fn add(left: u64, right: u64) -> u64 {
    left + right
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        let result = add(2, 2);
        assert_eq!(result, 4);
    }
}

build 시 라이브러리와 실행파일이 모두 생성됨을 알 수 있다.

vagrant@master:~/samples/myapp$ cargo build
   Compiling myapp v0.1.0 (/home/vagrant/samples/myapp)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.19s
vagrant@master:~/samples/myapp$ tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── lib.rs
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
... (생략)
        ├── libmyapp.d
        ├── libmyapp.rlib
        ├── myapp
        └── myapp.d

11 directories, 29 files

src 폴더 밑에 bin 폴더를 만들고 추가 Crate를 구성할 수도 있다. 추가로 build된 새로운 바이너리 mycrate1,mycrate1 가 생겼다. 총 4개의 Crate를 가지는 하나의 패키지가 되었다.

vagrant@master:~/samples/myapp$ tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── bin
│   │   ├── mycrate1.rs
│   │   └── mycrate2.rs
│   ├── lib.rs
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ... (생략)
        ├── libmyapp.d
        ├── libmyapp.rlib
        ├── myapp
        ├── myapp.d
        ├── mycrate1
        ├── mycrate1.d
        ├── mycrate2
        └── mycrate2.d

16 directories, 59 files

0개의 댓글