최근 러스트를 활용해서 게임 서버를 개발하기 위해 러스트를 공부 중인데, cargo/rustup/rustc 같은 명령어가 등장해서 이를 잘 구분하고 사용하기위해 작성한다.
cargo, rustup, rustc는 모두 Rust 언어와 관련된 개발 도구지만, 각 도구의 역할은 모두 다르다
rust의 패키지 관리 및 빌드 시스템이다.
rust 프로젝트를 만들고, 의존성을 관리하고, 코드를 빌드하고, 테스트 및 배포를 할 때 사용하는 도구이다. rust의 대부분의 작업은 모두 cargo를 통해 이루어진다.
cargo new
or cargo init
)cargo publish
)cargo new {project_name}
cargo fetch
cargo check
cargo build
cargo run
cargo test
rust 도구 체계 관리를 담당하는 도구. rust compiler(rustc) 및 다양한 도구 들의 버전을 관리하 수 있게 해준다. 특히 stable, beta, nightly 와 같은 rust의 다양한 채널을 쉽게 전환할 수 있도록 도와준다.
rustup install stable
rustup install nightly
rustup defalut stable # rust 기본 버전을 stable로 설정
rustup override set nightly # 특정 프로젝트에서 nightly 사용 설정
rustup update
rust 컴파일러다. 즉, rust 소스 코드를 컴파일해서 실행 가능한 바이너리로 변환하는 역할을 한다. 보통 rust 코드를 직접 컴파일할 때 cargo를 사용하지만, rustc를 통해 수동으로 컴파일 할 수도 있음
rustc main.rs
등의 명령어를 통해 수동으로 컴파일 가능
cargo는 프로젝트를 관리하고 여러가지 작업 (의존성 설치, 빌드, 테스트 등)을 수행하는 데 필요한 메타데이터와 설정을 처리한다. 하지만, 간단한 rust 파일을 컴파일 할때는 cargo보다 rustc로 직접 컴파일하는 것이 더 간단한 수 있다.
예를 들어 의존성이 없는 작은 스크립트나 예제 코드를 실행할 때 !
rustc를 직접 사용할 경우, 컴파일러 플래그나 옵션을 더 세밀하게 제어할 수 있다. 예를 들어 최적화 수준이나 특정 경고를 활성화/비활성화 하는 등의 작업을 할 수 있다.
# 디버그를 위한 기본 빌드
rustc main.rs
# 최적화된 릴리즈 빌드
rustc -C opt-level=3 main.rx
# 경고를 무시하는 옵션
rustc -Awarnings main.rs
cargo는 전체 프로젝트 빌드를 관리하는데, 이는 큰 프로젝트에서는 유용하지만 작은 테스트용 프로그램이나 실험적인 코드를 빠르게 컴파일할 때는 필요 이상의 오버헤드가 있을 수 있다. rustc는 직접 컴파일하므로 이런 오버헤드를 피할 수 있다