릴리즈 프로필을 이용한 빌드 커스터마이징

  • 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