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