Cargo

2020년 8월 10일 수정

Cargo는 Rust용 프로젝트 빌드 시스템 매니저 겸 패키지 매니저다. 프로젝트를 생성하거나 의존성이나 기타 외부 패키지를 설치하는 것을 도와준다. 이 도구의 사용 방법 몇 가지를 정리해보자.

새 프로젝트 생성하기

cargo new PROJECT_NAME --bin

위 명령은 실행 가능한 프로젝트를 해당 프로젝트 이름의 디렉터리에 생성한다. 참고로 --bin 옵션을 떼어도 동일한 동작을 하는데 명시적으로 확실하게 옵션을 넘겨주는 편이 좋을 것 같다.

엔트리 포인트 용도로 해당 프로젝트 디렉터리 아래의 src/main.rs 파일이 생성된다. 이 파일에는 hello world 코드가 작성되어 있다.

라이브러리 프로젝트로 만들고 싶다면 --bin 대신 --lib 옵션을 주면 된다. 바이너리 프로젝트와 구조적으로는 거의 동일하다.

참고로 별 옵션이 없을 경우 자동으로 Git 저장소가 된다. 필요 없다면 --vcs none 옵션을 추가해주자.

현재 디렉터리에 프로젝트 생성하기

이미 프로젝트 생성 없이 개발이 시작된 경우 등 현재 디렉터리를 프로젝트로 만들고 싶을 수도 있다. 이럴 때는 new 명령 대신 아래와 같이 init 명령을 사용할 수 있다.

cargo init --bin

별동의 옵션을 부여하지 않은 경우 현재 디렉터리 이름이 프로젝트 이름이 된다. new 명령과 비슷하게 --bin 대신 --lib 옵션을 줄 수 있다.

프로젝트 체크하기

cargo check

위 명령으로 프로젝트 빌드 시 문제점을 미리 찾을 수 있다.

프로젝트 빌드 하기

디버그 빌드 시에는 그냥 build 커맨드로 실행시킬 수 있다.

cargo build

실행 가능한 프로젝트라면 target/debug/PROJECT_NAME 경로에 실행 파일이 생성된다.

만약 릴리즈로 빌드 하려면 별도의 --release 옵션이 필요하다.

cargo build --release

이렇게 하면 target/release 디렉터리 아래에서 빌드가 되니 여기에서 바이너리를 찾을 수 있다.

프로젝트 실행하기

실행 가능한 바이너리 프로젝트의 경우 build로 빌드 한 후 별도로 실행시켜도 되지만 아래 처럼 별도의 명령을 사용할 수 있다.

cargo run

이러면 자동으로 필요한 파일을 빌드 한 후 실행시킨다.

참고로 run 뒤에 코드에 넘길 파라미터(argument)를 적을 수 있다.

cargo run arg1 arg2 arg3

의존성 설정하기

그냥 아래 커맨드로 의존성을 추가할 수 있다.

cargo add pkg1 pkg2 pkg3 ...

cargo 프로젝트의 Cargo.toml 이라는 파일이 의존성을 기록하고 있는데 위 커맨드로 자동으로 의존성이 추가된다.

수정하고 싶다면 이 파일을 열어서 [dependencies] 라고 표시한 곳을 살펴보자.

[dependencies]
time = "0.1.12"

위의 경우 time 0.1.12 버전 패키지가 필요하다는 의미다.

버전의 경우 유명한(?) 여러 방식의 표현을 지원한다.

^1.2.3
1.2.3 이상 2.0.0 미만
~1.2.3
1.2.3 이상 1.3.0 미만
1.*
1.0 이상 2.0 미만 (와일드카드와 비슷하다)

이 외의 여러 표현 방식이 있지만 아무래도 이 것들이 자주 쓰일 것 같다.

의존성 설치하기

의존 패키지는 build 커맨드 실행 시 알아서 설치가 진행된다.

cargo build

의존성 버전을 업데이트 하기 위해서 update 커맨드를 수동으로 사용할 수 있다.

cargo update

특정한 패키지만 업데이트 하려면 -p 옵션을 붙이면 된다.

cargo update -p package-name

테스트

프로젝트에 테스트가 구현되어 있을 경우 아래 커맨드로 테스트를 일괄 진행할 수 있다.

cargo test

필요하다면 원하는 테스트만 실행시킬 수도 있다.

cargo test filter-name

패키지 문서 보기

Cargo는 아주 멋진 통합 문서 뷰어 기능을 제공한다.

cargo doc --open

이 명령은 의존 패키지 문서를 만들어서 웹 브라우저에 표시해준다. 따라서 프로젝트에서 사용하는 모든 의존 패키지의 문서를 여기서 찾아볼 수 있다.

터미널에서 볼 수 있었다면 더 좋았을 텐데 그건 약간 아쉽다.

별도 패키지 설치

npm이나 pip가 그러하듯이 독자 실행 패키지도 Cargo를 이용해 설치할 수 있다.

우선 패키지를 검색해보자.

cargo search package-name

이렇게 패키지를 검색한 후 아래 커맨드로 설치한다.

cargo install package-name

물론 삭제하는 커맨드도 제공한다.

cargo uninstall package-name