Rust - 카고와 Crates.io May 4, 2020 릴리즈 프로필을 이용한 빌드 커스터마이징 Rust에서는 release profile이 미리 정의되어 있다. 다양한 설정의 커스터마이징이 가능한 프로필이 준비되어 있고 각 프로필은 서로 독립적으로 구성되어 있다 Cargo는 2개의 주 프로필이 있음 cargo build 명령을 실행할때 사용하는 dev 프로필 cargo build –release 명령을 실행할때 사용하는 release 프로필 Cargo.toml 파일의 [profile.*] 섹션을 이용하면 프로필을 직접 구성할 수 있다. [profile.dev] opt-level = 0 # opt-level은 최적화 수준 (0-3) [profile.release] opt-level = 3 # 더많은 최적화를 제공할수록 컴파일 타임 늘어남 crates.io 사이트에 크레이트 발행하기 http://crates.io 의 크레이트 registry는 패키지의 소스코드를 배포하므로 오픈소스로 작성된 코드를 주로 호스팅한다. documentation comment를 이용해 패키지 사용자들이 이해할수 있도록 작성한다 /// Adds one to the number given. /// /// # Examples /// /// ``` /// let five = 5; /// /// assert_eq!(6, my_crate::add_one(5)); /// ``` pub fn add_one(x: i32) -> i32 { x + 1 } Example 섹션 외에도 Panics, Errors, Safety 섹션을 사용할 수 있다. pub use 구문을 이용하면 중첩된 모듈을 최상위로 노출시켜 사용자에게 훨씬 편리한 경험을 제공할 수 있다. 크레이트 발행은 영구적이므로 발행시에는 충분히 주의를 기울여야 한다. 버전은 절대 덮어쓸 수 없으며 코드 역시 삭제할 수 없다. 발행하기 crates.io에 github계정으로 로그인 crates.io/me로 이동해서 API키를 조회 쉘에서 cargo login [API TOKEN] 명령을 실행하면 ~/.cargo/credential 파일에 토큰을 저장한다 Cargo.toml 파일에 package섹션을 추가해서 크레이트에 대한 메타데이터를 제공해야 한다. [package] name = "guessing_game" version = "0.1.0" authors = ["Your Name <you@example.com>"] description = "A fun game where you guess what number the computer has chosen." license = "MIT OR Apache-2.0" cargo publish Cargo workspace 프로젝트를 진행하다 보면 바이너리 크레이트 크기가 계속 증가해서 패키지를 여러개의 라이브러리 크레이트로 나누어야 할 시기가 온다. 이때 여러개의 패키지를 관리할 수 있는 workspace라는 기능을 제공한다. 새로운 작업공간을 생성 작업공간을 위한 새 디렉토리를 생성한다 Cargo.toml을 생성. 이때 root dir의 toml파일과 다르게 [package] 섹션이나 메타데이터를 포함하지 않는다. 대신 [workspace] 섹션에 바이너리 혹은 라이브러리 크레이트 경로를 추가한다. 해당 디렉토리 내에서 cargo new로 멤버로 명시한 바이너리/라이브러리 크레이트를 생성한다. 바이너리 크레이트에서 라이브러리 크레이트를 사용할 경우 바이너리 크레이트 경로의 toml의 [dependencies] 섹션에 의존성을 명시해 주어야 사용할 수 있다. 바이너리 크레이트를 실행하려면 cargo run 명령에 -p인수를 사용해서 작업공간에서 실행할 패키지의 이름을 지정해야 한다 Cargo install 명령을 이용해 crates.io에서 바이너리 설치하기 cargo install 명령을 이용하면 바이너리 크레이트를 로컬에 설치해 사용할 수 있다. 바이너리가 들어있는 크레이트만 설치할 수 있다. $ cargo install ripgrep