Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

의존성

대부분의 프로그램은 일부 라이브러리에 의존성을 가집니다. 의존성을 수동으로 관리해 본 적이 있다면 그것이 얼마나 고통스러운 일인지 알 것입니다. 다행히도 Rust 생태계에는 cargo가 표준으로 포함되어 있습니다! cargo는 프로젝트의 의존성을 관리할 수 있습니다.

새로운 Rust 프로젝트를 만들려면,

# 바이너리
cargo new foo

# 라이브러리
cargo new --lib bar

이 장의 나머지 부분에서는 라이브러리가 아닌 바이너리를 만든다고 가정하겠습니다. 하지만 모든 개념은 동일합니다.

위의 명령어를 실행한 후에는 다음과 같은 파일 계층 구조를 보게 될 것입니다:

.
├── bar
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
└── foo
    ├── Cargo.toml
    └── src
        └── main.rs

main.rs는 새로운 foo 프로젝트의 루트 소스 파일입니다. 특별할 것은 없습니다. Cargo.toml은 이 프로젝트에 대한 cargo 설정 파일입니다. 그 안을 들여다보면 다음과 같은 내용을 볼 수 있을 것입니다:

[package]
name = "foo"
version = "0.1.0"
authors = ["mark"]

[dependencies]

[package] 아래의 name 필드는 프로젝트의 이름을 결정합니다. 이는 크레이트를 배포할 때(나중에 자세히 설명함) crates.io에서 사용됩니다. 또한 컴파일할 때 생성되는 바이너리의 이름이기도 합니다.

version 필드는 유의적 버전(Semantic Versioning)을 사용하는 크레이트 버전 번호입니다.

authors 필드는 크레이트를 배포할 때 사용되는 작성자 목록입니다.

[dependencies] 섹션에서는 프로젝트에 필요한 의존성을 추가할 수 있습니다.

예를 들어, 우리 프로그램이 멋진 CLI를 갖기를 원한다고 가정해 봅시다. crates.io (공식 Rust 패키지 레지스트리)에서 훌륭한 패키지들을 많이 찾을 수 있습니다. 인기 있는 선택지 중 하나는 clap입니다. 이 글을 쓰는 시점에서 clap의 최신 버전은 2.27.1입니다. 프로그램에 의존성을 추가하려면 Cargo.toml[dependencies] 아래에 다음과 같이 추가하면 됩니다: clap = "2.27.1". 이것으로 끝입니다! 이제 프로그램에서 clap을 사용할 수 있습니다.

cargo다른 유형의 의존성도 지원합니다. 다음은 몇 가지 예시입니다:

[package]
name = "foo"
version = "0.1.0"
authors = ["mark"]

[dependencies]
clap = "2.27.1" # crates.io에서
rand = { git = "https://github.com/rust-lang-nursery/rand" } # 온라인 저장소에서
bar = { path = "../bar" } # 로컬 파일시스템의 경로에서

cargo는 단순한 의존성 관리자 그 이상입니다. 사용 가능한 모든 설정 옵션은 Cargo.toml형식 명세(format specification)에 나열되어 있습니다.

프로젝트를 빌드하려면 프로젝트 디렉토리 어디에서나(하위 디렉토리 포함!) cargo build를 실행하면 됩니다. 또한 cargo run을 통해 빌드와 실행을 동시에 할 수도 있습니다. 이 명령어들은 모든 의존성을 해결하고, 필요한 경우 크레이트를 다운로드하며, 여러분의 크레이트를 포함한 모든 것을 빌드합니다. (이미 빌드된 것은 다시 빌드하지 않으며, 이는 make와 유사합니다).

보세요! 이게 전부입니다!