STUDY/Rust

Rust - 2. 프로젝트 생성

sinawi95 2024. 2. 13. 17:31
728x90

설치까지 다했으니 이젠 hello world를 쳐볼 차례이다.


1. Hello, Rust World!

새로운 디렉토리를 만들고 러스트 프로젝트를 몰아넣자. 적당히 관리하기 편하게

$ mkdir rust
$ cd rust
$ pwd

-- output --
/Volumes/T7/Study/rust
  • 외장 하드에 폴더를 생성해서 /Volumes/ 라는 위치에 있다. 

여기에 또 새로운 폴더를 만들고 main.rs 파일까지 만들어보자

$ mkdir hello-rust-world
$ cd hello-rust-world
$ vi main.rs

 

main.rs는 아래와 같이 작성한다.

fn main() 
{
  println!("Hello, Rust World!");
}

작성 후 아래 커맨드를 입력하면 프로그램 하나가 만들어 진다.

$ rustc main.rs
$ ls 

-- output --
main	main.rs
  • rustc라는 컴파일러를 사용해서 main.rs 프로그램을 컴파일하는 명령어이다. 

main을 실행하면 터미널에 "Hello, Rust World!" 가 출력된다.

$ ./main  

-- output -- 
Hello, RUST world!

 

이정도면 rust 다했다.

 

2. 패키지 생성 with cargo

위랑 비슷하지만 cargo를 사용해서 프로젝트를 만들어보자.

아래 명령어를 차례대로 입력해보자

$ cargo new hello
$ cd hello
$ cargo run
  1. cargo new {project_name} : 새로운 프로젝트를 만드는 명령어
  2. 만들어진 프로젝트 폴더로 이동하는 명령어
  3. 프로젝트 빌드 및 실행

차례대로 입력하면 아래와 같이 뜬다

$ cargo new hello
     Created binary (application) `hello` package
$ cd hello
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/hello`
Hello, world!
  • 마지막 줄에 Hello, world 가 출력된다.
더보기

cargo build 랑 cargo run의 차이는 하나다. 

cargo build는 빌드만 하고 cargo run은 빌드한뒤 실행까지한다.

cargo check 라는 것도 있는데 빌드는 안하고(실행파일이 생성되지 않음) 컴파일 되는지만 확인한다. 문법 에러만 보는 정적분석 쯤?

rustc를 사용해서 직접 컴파일 하는 것보다 cargo를 사용하는게 더 쉽게 시작할수 있다!

3. 비교

cargo 로 만들어진 프로젝트는 뭐가 들어있길래 쉽게 빌드까지 할 수 있을까? 프로젝트 내 파일을 살펴보자

$ ls -al
total 2304
drwx------  1 -  staff  131072  2 13 16:01 .
drwx------  1 -  staff  131072  2 13 15:57 ..
-rwx------  1 -  staff    4096  2 13 16:30 ._target
drwx------  1 -  staff  131072  2 13 16:01 .git
-rwx------  1 -  staff       8  2 13 16:01 .gitignore
-rwx------  1 -  staff     149  2 13 16:30 Cargo.lock
-rwx------  1 -  staff     174  2 13 16:01 Cargo.toml
drwx------  1 -  staff  131072  2 13 16:01 src
drwx------@ 1 -  staff  131072  2 13 16:30 target

.git, .gitignore: git 관련 파일이다

Cargo.toml 

name = "hello"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
  • 패키지 관리할때 필요한 내용들을 적는듯하다.
  • dependencies에 필요한 패키지를 적으면 필요 라이브러리에 대해서 설치, 빌드, 업데이트 등을 해준다.

Cargo.lock

  • 처음 빌드할때 (기준을 만족하는) 패키지의 버전을 모두 확인해서 적어둔다.
  • 이후 빌드할때 해당 파일에 적혀있는 버전을 사용함.

src: 실제 러스트 코드가 들어가는 폴더

  • 여기에 main.rs가 들어가있고 "1. hello, rust world" 에서 직접 작성했던 코드가 들어가있다.

target: 빌드한 결과물이 저장되는 폴더

  • cargo build, cargo run등을 통해서 만들어진 결과물이 들어간다.
  • target/build/ 내에 프로젝트 이름으로 된 실행 파일이 있다.
    • 빌드할때 release 버전으로 하면(cargo build --release) taget/release/에 생성된다.

간단하게 러스트 파일을 컴파일하려면 rustc를 써서 직접 하면 되겠지만 프로젝트가 커지면 cargo를 쓰는게 의존관계도 알아서 잡아주고 쉽게 할수 있는듯하다.

  • gcc를 직접 안쓰고 makefile이나 cmake 써서 하는 그정도 느낌이다. react 사용할 때 npm으로 빌드까지 해주는 느낌
  • c에서 makefile 직접 작성하는 것보단 훨씬 나은듯하다.

 


https://doc.rust-kr.org/ch01-03-hello-cargo.html

https://doc.rust-lang.org/cargo/

'STUDY > Rust' 카테고리의 다른 글

Rust - 5. 문법/함수, 주석, 제어흐름문  (0) 2024.02.15
Rust - 4. 문법/변수, 데이터 타입  (0) 2024.02.14
Rust - 3. 추리게임 만들기 (with python)  (0) 2024.02.14
Rust - 1. 설치  (0) 2024.02.13
Rust - 0. 시작에 앞서  (0) 2024.02.13