Rust 프로젝트 디렉터리 구조

프로젝트 디렉터리 생성시 구조

  • 앞선 포스팅에서 살펴본 대로, 프로젝트 생성시의 구조는 아래와 같다.
1
2
3
4
5
6
7
cd hello_world
ls -al

>> hello_world
>> ├⎯ src
>> ⎪    ├⎯ main.rs
>> ├⎯ Cargo.toml
구성 유형 역할
Cargo.toml 파일 - Rust 프로젝트의 메타데이터 및 의존성 정보 관리.
- 프로젝트의 이름, 버전, 저자와 같은 기본적인 정보.
- 프로젝트에 필요한 외부 크레이트(의존성)의 목록을 정의.
- 빌드 설정, 프로젝트 유형(예: binary 또는 library) 등의 추가적인 설정
src 디렉터리 - Rust 소스 코드 파일을 저장하는 디렉터리.
- Rust 프로젝트의 핵심 로직이 포함된 소스 코드 파일이 위치.
- 기본적으로 최소한 하나의 Rust 파일(일반적으로 main.rs)이 있어야 함.
src/main.rs 파일 - Rust 프로그램의 시작점(진입점).
- main 함수가 정의되어 있으며, 이 함수에서 프로그램이 실행됨.

빌드 후 프로젝트 디렉터리 구조

  • 여기에서 빌드(코드 실행을 포함) 후에는 target 디렉터리와 몇 가지 파일이 생성된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
project_name/
├── Cargo.lock               # 의존성 잠금 파일 (빌드 후 생성)
├── Cargo.toml               # 프로젝트 메타데이터 및 의존성 정의
├── src/                     # 소스 코드 디렉터리
│   └── main.rs              # 메인 실행 파일 (또는 lib.rs)
├── target/                  # 빌드 산출물 저장소
│   ├── debug/               # 디버그 모드 빌드 결과 (cargo build)
│   │   ├── project_name     # 실행 파일
│   │   ├── deps/            # 의존성 바이너리
│   │   ├── incremental/     # 증분 빌드 캐시 (항상 생성됨)
│   │   ├── *.d              # 의존성 추적 파일
│   │   └── *.rlib           # 라이브러리 산출물
│   ├── release/             # 릴리즈 모드 빌드 결과 (cargo build --release 실행시)
│   │   ├── project_name     # 최적화된 실행 파일
│   │   └── ...              # 같은 구조
│   ├── build/               # 빌드 스크립트 출력
│   ├── .fingerprint/        # 빌드 캐시 및 해시 정보
│   ├── package/             # 패키지 파일 (cargo package)
│   └── doc/                 # 문서 출력 (cargo doc)
└── .git/                    # Git 초기화 시 생성 (선택 사항)

Incremental 디렉터리

  • 증분 빌드 : 변경 부분만 다시 컴파일 하는 것을 증분 빌드라고 함.
  • Incremental 디렉터리에서 증분빌드를 위한 중간 캐시 데이터를 보관.
  • Rust는 기본적으로 디버그 빌드(cargo build)에서 증분 빌드를 활성화 하며
  • 릴리즈 빌드(cargo build --release)에서는 증분 빌드를 사용하지 않는다.

Comments