rust를 처음 시작하는데 cargo라는 처음 접하는 개념이 있었다.(물론 프로그래밍을 한지 얼마 안되서 그러는 거일수도)

c++을 사용하면서 vs를 이용해 c++ 프로젝트를 관리해왔었는데 rust 같은 경우는 cargo를 이용해 컴파일과 프로젝트를 관리 할 수 도 있다.

그럼 기존 방식에 비해 carog를 이요한 프로젝트 관리가 얼마나 좋은지 한번 알아보자


http://doc.crates.io/guide.html  <- cargo에 대한 가이드 이다. 일단 이거 기준으로 정리를..


Cargo는 기본적으로 4가지의 일을 한다

1. 프로젝트의 정보들을 두 개의 메타데이터 파일로 볼 수 있다.

2. 프로젝트 의존성을 가져오고 빌드한다.

3. 프로젝트가 올바르게 빌드 될 수 있도록 rustc혹은 다른 컴파일러의 인자를 맞춰 실행시켜준다.

4. 규칙에 대해 설명해주고 작업공간을 만들어 Rust project를 더 쉽게 할 수 있도록 해준다

    (Introduces conventions, making working with Rust projects easier. 원문은 이건데 해석이 맞는지는 모르겠다)


뭐 이론적인 설명은 여기까지로 하고

실제로 카고를 써보겠다


먼저 프로젝트를 만들어보자

커멘드 상에서 cargo new 프로젝트명 --bin 을 치게 되면 프로젝트가 만들어진다


[프로젝트가 만들어진 모습]

IDE의 프로젝트 네비게이터를 통해 보면 cargo를 이용해서 만들어진 프로젝트의 구조는 다음과 같다.

.
├── Cargo.toml
└── src
       └── main.rs

여기서 Cargo.toml은 메니페스트로써 프로젝트를 컴파일 하기 위한 모든 메타데이터들을 포함하고 있다.

그리고 src/main.rs 는 소스파일이다.


[hello world!]

다음과 같이 간단한 hello world!를 작성하고


cargo build 명령어를 쳐주게 되면 알아서 컴파일 해 준다.


[build rust project with cargo]




그럼 간단한 빌드를 해봤으니 의존성(dependency)를 추가해 보자.


[dependency]

Cargo.toml 에 dependencies time그리고 버전명을 써준후 저장하고

빌드를 하게 되면 의존성에 필요한 것들을 다운로드 한다.

막 다운 받고 잘 되겠거니 했더니 오류가 난다 =_=

64bit gcc가 없다길래 cygwin을 이용해서 컴파일 해봤다



아주 자알 된다.

아마 64bit gcc의 환경변수를 안잡아놔서 그런듯 싶다.

더 많은 모듈들을 보고 싶다면 https://crates.io/ 이사이트에 들어가서 쭈욱 보면된다.


[위 처럼 생겼다]

openssl 도 있고 regex도 있고 있을만한건 거의 다 있는 것 같다.


cargo를 쓰게되면 다른사람의 프로젝트도 쉽게 컴파일 할 수 있다.


간단하게 git에서 rust project를 하나 받고 컴파일 하면 의존성 문제없이 잘 컴파일 된다.

(이거 한줄 쓰려고 처음으로 깃헙도 가입했다.)


프로젝트에서 라이브러리를 추가 하는 것도 간단하다

Cargo.toml에서 다음과 같이 dependencies.라이브러리이름

그리고 깃 저장소 주소를 쓰면 된다.





이외에도 Cargo.lock을 이용해 라이브러리의 버전관리도 가능하다고 한다.

(git을 잘 써보지 않아 테스트는 직접 못해보겠다..)


아 그리고 cargo를 사용할 떄 유의해야할 점들이 몇가지 있다.

1. Cargo.toml 과 Cargo.lock은 프로젝트 최상위 폴더에 있어야 한다.

2. 소스코드는 src폴더안에 있어야 한다.

3. External tests go in the tests directory. (외부 테스트는 tests디렉토리에 있어야 한다??? 해석 불가 ㅠㅠ)

4. 기본 실행 파일은 src/main.rs 다

5. 기본 라이브러리 파일은 src/lib.rs다


뒷부분은 git을 이용하는 부분이 있는 것 같아서 혹시 사용해 보게 된다면 따로 추가해야겠다.


사실 파이썬을 별로 안좋아 하는 이유중 하나가 라이브러리를 추가하기가 어렵다는 점 이였는데

rust는 cargo를 이용해서 매우 간단하게 추가할 수 있어서 굉장히 마음에 든다.

익숙해지면 프로젝트 버전 관리나 의존성은 매우 잘 해결 될 것같다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Creative Commons License
Creative Commons License

'공부 > 프로그래밍' 카테고리의 다른 글

Go variable export unexport & Gorp reflect panic  (0) 2015.07.10
Golang 변수 초기화 + func init  (0) 2015.06.15
Rust - cargo를 이용한 rust 프로젝트 관리 (Cargo 사용법)  (0) 2015.02.21
Turtle  (0) 2014.06.24
이진탐색  (0) 2014.05.20
dll injector 관련 자료  (0) 2014.05.19

WRITTEN BY
Jen6
jen6의 개발, 보안 블로그 까끔가다 쓸대 있는걸 올리려고 노력중

받은 트랙백이 없고 , 댓글이 없습니다.
secret