1. 카고(Cargo)란?
카고는 러스트 빌드 시스템 및 패키지 매니저로 코드 빌드나 코드 작성에 필요한 외부 라이브러리(dependency)를 다운로드할 때나, 라이브러리를 제작할 때 겪는 귀찮은 일들을 줄여주는 도구이다. 아래의 명령어로 카고가 설치되어 있는지 확인해보자.
cargo --version
2. 카고로 프로젝트 생성하기
본인이 원하는 디렉토리에서 아래의 명령어로 cargo 디렉토리 및 파일들을 생성해보자. hello_cargo 라는 이름으로 지정했고, 카고는 동일한 이름의 디렉토리 안에 파일들을 생성한다. hello_cargo 안으로 들어가 ls 명령어로 조회해보자.
$ cargo new hello_cargo
$ cd hello_cargo
그럼 위와 같이 hello_cargo 안에 git, Cargo.toml, src 디렉토리가 생긴 것과 src 디렉토리 내 main.rs가 생긴 것을 확인할 수 있다.
.toml은 TOML(Tom's Obvious, Minimal Langauge, https://toml.io/) 을 의미한다. toml 포맷은 카고 설정에서 사용하는 포맷이다.
cargo new 로 생성된 Cargo.toml 파일의 내용을 보면, [package]와 [dependencies]로 나뉜다. [package]라고 적힌 첫 번째 라인은 섹션 헤더로, 뒤에 패키지 설정 구문들이 따라오는걸 확인할 수 있다. name, version, edition은 카고가 코드를 컴파일하는 데 필요한 설정 정보로, 각각 패키지명, 버전, 작성자, 사용하는 러스트 에디션을 나타낸다. [dependencies]는 말그대로 프로젝트에서 사용하는 디펜던시 목록이다.
* 러스트에서는 코드 패키지를 크레이트(crate)라고 부른다고 한다.
카고 프로젝트의 코드 위치는 src 디렉토리 내에 있으며, 최상위 디렉토리에 Cargo.toml 설정 파일이 존재한다. 카고는 소스 파일이 src 내에 있다고 예상하고, 최상위 프로젝트 디렉토리는 README, 라이센스, 설정 파일 등 코드 자체와는 관련 없는 파일들을 저장하는 데 사용된다. 이처럼 카고는 각각의 파일을 알맞은 위치에 배치하여 프로젝트를 구조화하고 체계적으로 만드는 데 기여한다.
3. cargo build와 cargo run
3.1) cargo build 명령어로 실행하기
카고로 생성한 프로그램을 빌드하고 실행해보자. 먼저 cargo build 명령어로 바이너리를 생성해보자. 그럼 hello_cargo 디렉토리 내에 target이라는 디렉토리가 생기고 그 안에 debug 라는 디렉토리가 또 있고 그 안에 바이너리 파일이 들어있다.
hello_cargo 디렉토리에서 바로 실행하려면 ./target/debug/hello_cargo 라고 입력하면 되고, hello_cargo를 실행하면 Hello, world!가 출력될 것이다.
3.2) cargo run 명령어로 실행하기
cargo run 명령어를 사용하면 컴파일과 실행을 한 번에 진행할 수 있다. (대부분 개발을 할 땐 cargo run을 이용한다고 하니 참고하자.)
기존에 작성했던 소스코드에 변경사항이 없기 때문에 Compiled hello_cargo 멘트가 뜨지 않고, 컴파일없이 바로 기존 바이너리를 실행했음을 알 수 있다.
3.3) cargo check
cargo check는 실행 파일은 생성하지 않고, 소스 코드가 문제없이 컴파일 되는지만 확인하는 명령어이다. 실행 파일을 생성하는 단계를 건너뛰기 때문에 cargo build보다 훨씬 빠르다. 즉, 실행 파일이 필요한 경우에만 cargo build를 사용하면 된다.
4. cargo 명령어 정리
- cargo new: 새 프로젝트를 생성
- cargo build: 프로젝트 빌드
- cargo run: 한 번에 프로젝트를 빌드하고 실행
- cargo check: 바이너리를 생성하지 않고 프로젝트 에러를 체크
- cargo build --release: 릴리즈 빌드를 생성 -> target/release에 실행 파일이 생성된다.
'Linux&Programming' 카테고리의 다른 글
[Rust] 러스트 프로그래밍 공부 변수와 상수, 섀도잉 (0) | 2024.12.07 |
---|---|
리눅스 커널 디버깅 pr_debug 사용하기 (0) | 2024.12.06 |
[Rust] 01. 러스트 설치하기 (mac OS) (1) | 2024.12.02 |
Ubuntu TACACS+ 서버 구축 및 systemd 서비스 생성하기 (0) | 2024.09.25 |
리눅스 커널 메모리 할당과 GFP Flags (kmalloc, GFP_KERNEL, GFP_ATOMIC) (3) | 2024.09.20 |