러스트에서 Cargo는 Nodejs의 npm, yarn이나 Java의 maven, gradle, PHP의 composer등과 같은 패키지 관리자이며 빌드 시스템이기도 하다.
Cargo를 이용하면 의존성 추가하기가 쉽다. (ㅋㅋㅋ)
카고 버전 확인
1 | cargo --version |
카고 프로젝트 생성
1 | cargo new project_name |
위와같이 프로젝트를 생성하면 프로젝트 디렉터리 내에 Cargo.toml, src 디렉터리가 있으며, src내에는 main.rs 가 기본적으로 생성되네?
- TOML : Tom’s Obvious Minimal Language
Rust에서 코드의 패키지는 crate라고 부른다.
카고 프로젝트는 모든 소스코드를 src하위에 저장하며, 최상위 디렉터리는 README, 라이센스, 설정 파일등의 코드와 무관한 파일들을 저장한다.
빌드 (프로젝트 디렉터리 내에서)
1 | cargo build |
cargo build 후에는 target이라는 디렉터리가 생성되며 그 안에 debug 디렉터리, 그 안에 프러젝트명으로 컴파일된 파일이 저장된다. ./project_name으로 실행하면 컴파일된 rust 프로그램이 실행된다.
빌드 및 실행
1 | cargo run |
위의 명령어를 실행 시 컴파일을 진행하고 경로를 찾아 들어가서 실행하지 않아도 해당 프로젝트의 결과물을 실행해준다. (빌드 + 실행을 한번에!)
코드 체크
1 | cargo check |
실행파일 생성 과정이 없으므로 빠르게 코드가 정상적인지 검증이 가능하여, 자주 사용한다.
- cargo 사용 시 OS와 무관하게 같은 명령을 사용할 수 있다.
릴리즈용 빌드하기
1 | cargo build --release |
위와 같이 빌드를 진행하면 최정화된 방식으로 컴파일을 실행하며, target/release에 빌드 결과물이 저장된다.
최적화된 덕분에 결과물의 실행은 아주 빠르지만 컴파일 시간은 좀 더 소요된다.
- cargo build 시 Cargo.toml에 추가된 dependencies가 있으면 crates.io에서 다운로드 한다.
- 최초로 cargo build를 실행할 때 Cargo.lock 파일이 생성되며, 여기에는 현재 프로젝트에서 사용하는 dependencies들의 버전을 기록한다. 이로써 원치않는 crate의 업데이트로 인한 build crash를 막아준다. (다른 모든 패키지 매니저들이 취하는 방식과 같다.)
crate 버전 업데이트
1 | cargo update |
Cargo.lock과 관계 없이 새로운 버전의 crate로 업데이트 한다.
프로젝트의 dependencies가 제공하는 docs 보기
1 | cargo doc --open |
모든 의존 패키지가 제공하는 문서를 로컬에 빌드 후 브라우저로 보여준다.