Rust/Basics

[Rust for Solana] Cargo

Sonny Cucumber 2022. 4. 5. 17:17

Cargo란 npm 처럼 러스트의 빌드 시스템 및 패키지 매니저다!

 

버젼 확인을 위해서는 cargo --verison으로 확인!

 

프로젝트 생성하기

cargo new hello_cargo --bin

--bin은 바이너리. 이는 라이브러리가 아닌 실행가능한 앱으로 만들어줌

프로젝트를 생성하면

요로케 Cargo.toml과 main.rs 그리고 gitignore이 생기며

git 저장소도 초기화됨

 

Cargo.toml을 열어보면

이 파일은 toml(tom's obvious, minimal language)포맷으로 작성,

이것이 Cargo의 환경설정 포맷.

 

마지막 라인 [dependencies]은 우리의 프로젝트의 

의존성들의 리스트를 적을 수 있는 섹션의 시작점.

 

러스트에선 코드의 패키지를 크레이트(Crate)라고 부름

여기선 다른게 필요없지만 다음에 써보자

 

암튼 Cargo가 만든 프로젝트는

src폴더 안에 코드를 위치시키고 toml 환경파일을 가지게해준다!

만약 Cargo로 하지 않았으면 똑같이 src폴더 안에 넣어주고

적합한 toml파일을 생성하면 된다요

 

Cargo 프로젝트를 빌드하고 실행하기

Cargo없이 했을 때와 차이점을 살펴보자요

 

cargo build 를 찍어보면 현재 폴더가 아닌

새로운 폴더 안에 target/debug/hello_cargo 가 생긴다.

위 캡쳐 이미지 제일 아래 명령어를 입력하면 Hello, World! 가 생김ㅎ

 

또한 cargo build를 실행하면 Cargo.lock이라는 새로운 파일을 생성.

내가 방금 만든 이 프로젝트는 의존성 (dependencies)가 없으니

파일의 내용이 얼마 없다.

 

또한 이렇게 빌드하고 직접 실행하는 대신에

cargo run 으로 간편하게 실행할 수도 있다!

 

이 상황에선 코드가 수정된 적이 없는 것을 확인하면

컴파일하지 않고 바로 바이너리 파일을 실행하게 된다. 

 

만약 수정되어있다면 빌드할거고!

 


Cargo는 cargo check 이라는 커맨드도 제공,

실행파일(바이너리)을 제공해주지는 않지만 

컴파일 되는지를 빠르게 확인해준다.

 

이건 왜 쓰이는걸까? 당연하게도

실행파일 만드는 단계를 생략하기 때문인데

완벽하게 준비되기 전에는 check만 해주는 것이고

마지막에 cargo build해준다고 보면 된다.

 


마침내 배포 준비가 되었으면

cargo build --release를 사용하면 최적화와 함께 컴파일해준다

이는 위에랑 다르게 target/debug가 아닌

target/release에 실행파일을 만들어준다고 한다

 

최적화는 우리의 러스트 코드를 빠르게 해주지만

컴파일 시간이 길어진다. 이래서 다른 프로필이 생기는 이유.

 

하나는 개발용 하나는 최종빌드용

 

관례로서의 Cargo

단순한 프로젝트와 함께 cargo를 사용하는 것은 그냥 rustc을

이용하는 것에 비해 큰 가치를 제공해주지는 못합니다만

 

더 복잡해질 수록 Cargo는 진가를 발휘할거다

여러개의 크레이트로 구성된 복잡한 프로젝트오 함꼐라면 Cargo가

빌드를 조직화하도록 하는 것이 훨씬 쉽습니다.

 

그리고

어떤 프로젝트들 상에서 작업을 하기 위해서,

우리는 Git을 사용하여 체크아웃하고 그 폴더로 가서

빌드하기 위해

 

git clone someurl.com/someproject

cd someproject

cargo build

 

이렇게 명령어를 사용할 수도 있음!