crate
은 Rust 컴파일러가 한 번에 처리하는 가장 작은 단위의 코드이다. cargo
대신 rustc
를 작동시켜도 컴파일러가 파일을 crate
로 인식한다.
crate
에는 Binary Crates
, Library Crates
두 가지 타입이 존재한다. Binary Crates
는 command-line 프로그램이나 서버와 같이 직접 실행할 수 있는 프로그램이다. Library crates
는 main
함수가 존재하지 않고, 실행할 수 있게 컴파일 되지 않는다.
Package는 기능들을 제공하는 crate
묶음이다. pacakage는 이러한 crate들을 build하는 방법을 포함한 Cargo.toml
을 갖고 있다. crate root
는 Rust 컴파일러가 내 crate의 root module을 만들고, 시작하는 소스 파일이다. Cargo
는 코드를 작성하지 위해 사용한 command-line tool을 위한 binary crate를 포함하고 있다. Cargo command-line tool이 사용하는 같은 로직을 사용하기 위해서 Cargo librry에 depend 할 수 있다.
cargo new
를 사용하여 Cargo를 활용해 프로젝트를 새로 생성할 수 있다.
$ cargo new my-project
Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs
Cargo는 src/main.rs가 패키지와 이름이 같은 binary root crate가 된다는 협약을 따른다. 이와 같이 Cargo 는 package directory가 scr/lib.rs 를 포함하고 있다면, package와 같은 이름의 library crate를 포합하고 있다고 인식한다. Cargo 는 library나 binary를 빌드하기 위해서 root file에서 rustc
를 지난다
만약, src/main.rs와 scr/lib.rs를 모두 포함하고 있다면, package는 src/bin directory에 파일을 배치하여 여러 binary crate를 가질 수 있다: 각 파일은 독립적인 binary cfrate가 된다.