curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
rustup update
Rust를 설치 했으므로, 첫 번째 Rust 프로그램을 작성해보자
mkdir ~/projects
cd ~/projects
mkdir hello_world
cd hello_world
main.rs
라는 새로운 파일을 만들고, 다음과 같은 내용을 작성한다.
# main.rs
fn main() {
println!("Hello, world!");
}
이제 작성한 파일을 rustc
를 이용해 컴파일하고, 컴파일된 main
이라는 실행 파일을 실행한다.
$ rustc main.rs
$ ./main
Hello, world!
Cargo는 Rust의 빌드 시스템이자 패키지 관리자 입니다.
Cargo는 코드 빌드, 코드 의존성 라이브러리의 다운로드, 빌드와 같은 작업을 처리합니다.
cargo new hello_cargo
cd hello_cargo
Cargo를 이용해 프로젝트를 생성하면 다음과 같은 파일을 생성합니다.
.
├── .git/
├── .gitignore
├── Cargo.toml
└── src
└── main.rs
먼저 Cargo.toml
의 내용을 살펴 봅니다.
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
[package]
는 패키지를 구성하는 기본 섹션을 의미하며, Carto가 프로그램을 컴파일 하는데 필요한 구성 정보를 나타냅니다.
[dependencies]
는 프로젝트의 종속성 섹션을 의미하며, 코드 패키지(Rust에서는 crates라고 지칭) 정보를 나열합니다.
src/main.rs
의 내용을 살펴보면
fn main() {
println!("Hello, world!");
}
앞서 설명한 코드와 동일한 코드가 포함되어 있습니다.
이를 통해 Cargo를 통해 관리되는 코드는 /src
디렉토리안에 위치하며, 코드에 대한 종속성 관리는 Cargo.toml
을 통해 한다는 것을 알게 되었습니다.
이제 Cargo를 통해 프로젝트를 컴파일하고, 실행해볼 차례입니다.
$ cargo build
Compiling hello_cargo v0.1.0 (/rust/study/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.64s
이제 빌드된 실행 파일을 실행해보면
./target/debug/hello_cargo
Hello, world!
실행 후 프로젝트를 확인해 보면 Cargo.lock 파일이 추가되었습니다.
이 파일은 프로젝트의 정확한 버전의 종속성을 추척하며, Cargo에 의해 관리됩니다.
컴파일 후 실행 파일을 실핼할 수 도 있지만, 컴파일과 실행을 하나의 명령으로 진행할 수도 있습니다.
cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/hello_cargo`
Hello, world!
컴파일 명령어가 보이지 않는 것은, 처음 만들었던 main.rs
파일이 변경되지 않아서 입니다.
마지막으로 코드를 빠르게 검사하고 컴파일 하지만, 실행 파일은 생성하지 않는 cargo check
라는 명령어도 있습니다.
cargo check
Checking hello_cargo v0.1.0 (/rust/study/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.10s
cargo check
는 실행 파일을 생성하는 건너 뜁어 build
보다 훨씬 빠르게 코드를 확인할 수 있습니다.
코드를 작성하고 작업을 확인할 경우 훨씬 빠르게 코드를 검사할 수 있습니다.
프로젝트를 릴리즈 할때가 되면, cargo build --release
를 사용하여 최적화된 컴파일을 진행할 수 있습니다.
이 명령어를 실행할 경우 ./target/debug
가 아닌 ./target/release
에 실행 파일이 생성됩니다.