Rust 개발을 위한 필수 도구: rustup, cargo, rustc의 차이점과 사용법

Juppi·2024년 9월 11일
0

Rust

목록 보기
2/2
post-thumbnail

최근 러스트를 활용해서 게임 서버를 개발하기 위해 러스트를 공부 중인데, cargo/rustup/rustc 같은 명령어가 등장해서 이를 잘 구분하고 사용하기위해 작성한다.

cargo, rustup, rustc는 모두 Rust 언어와 관련된 개발 도구지만, 각 도구의 역할은 모두 다르다

Cargo

rust의 패키지 관리 및 빌드 시스템이다.

rust 프로젝트를 만들고, 의존성을 관리하고, 코드를 빌드하고, 테스트 및 배포를 할 때 사용하는 도구이다. rust의 대부분의 작업은 모두 cargo를 통해 이루어진다.

주요 기능

  • 새로운 프로젝트 생성 (cargo new or cargo init)
  • 패키지 관리: Cargo.toml 파일을 통해 의존성 라이브러리 관리
  • 빌드: 코드를 컴파일하고 빌드
  • 테스트: 유닛테스트 및 통합테스트 실행
  • 실행: 프로젝트를 실행
  • 배포: 코드를 패키징하여 배포 (cargo publish)

주요 명령어

cargo new {project_name}
cargo fetch
cargo check
cargo build
cargo run
cargo test
만약 Cargo.toml에 있는 의존성 패키지 목록만 설치하고, 파일 빌드는 원하지 않으면 cargo fetch를 활용할 수 있다 ! 그리고 cargo check라는 명령어를 사용하면, 코드를 컴파일하지 않고 의존성을 확인하며, 의존성이 없다면 다운로드한다.

Rustup

rust 도구 체계 관리를 담당하는 도구. rust compiler(rustc) 및 다양한 도구 들의 버전을 관리하 수 있게 해준다. 특히 stable, beta, nightly 와 같은 rust의 다양한 채널을 쉽게 전환할 수 있도록 도와준다.

주요 기능

  • Rust 버전 관리: 안정(stable), 베타(beta), 야간(nightly) 버전관리
  • Rust 채널 전환: 프로젝트 별로 특정 rust 버전을 선택할 수 있음
  • 도구 설치: rustc, cargo, clippy, rustfmt 등의 설치 및 업데이트
  • Toolchain 관리: 여러 버전의 rust 설치 및 전환 가능

주요 명령어

rustup install stable
rustup install nightly
rustup defalut stable             # rust 기본 버전을 stable로 설정
rustup override set nightly       # 특정 프로젝트에서 nightly 사용 설정
rustup update

Rustc

rust 컴파일러다. 즉, rust 소스 코드를 컴파일해서 실행 가능한 바이너리로 변환하는 역할을 한다. 보통 rust 코드를 직접 컴파일할 때 cargo를 사용하지만, rustc를 통해 수동으로 컴파일 할 수도 있음

rustc main.rs 등의 명령어를 통해 수동으로 컴파일 가능

🤔 rustc를 사용한 수동 컴파일의 장점은 ?

1. 간단한 프로젝트에 대한 빠른 컴파일

cargo는 프로젝트를 관리하고 여러가지 작업 (의존성 설치, 빌드, 테스트 등)을 수행하는 데 필요한 메타데이터와 설정을 처리한다. 하지만, 간단한 rust 파일을 컴파일 할때는 cargo보다 rustc로 직접 컴파일하는 것이 더 간단한 수 있다.

예를 들어 의존성이 없는 작은 스크립트나 예제 코드를 실행할 때 !

2. 세부적인 컴파일 옵션 제어

rustc를 직접 사용할 경우, 컴파일러 플래그나 옵션을 더 세밀하게 제어할 수 있다. 예를 들어 최적화 수준이나 특정 경고를 활성화/비활성화 하는 등의 작업을 할 수 있다.

# 디버그를 위한 기본 빌드
rustc main.rs

# 최적화된 릴리즈 빌드
rustc -C opt-level=3 main.rx

# 경고를 무시하는 옵션
rustc -Awarnings main.rs

3. 더 낮은 오버헤드

cargo는 전체 프로젝트 빌드를 관리하는데, 이는 큰 프로젝트에서는 유용하지만 작은 테스트용 프로그램이나 실험적인 코드를 빠르게 컴파일할 때는 필요 이상의 오버헤드가 있을 수 있다. rustc는 직접 컴파일하므로 이런 오버헤드를 피할 수 있다

0개의 댓글