Cargo

About

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

CargoはRustのパッケージ管理ツール。 以下の機能を有する:

  • 依存パッケージのダウンロード
  • コンパイル
  • 配布可能なパッケージの作成
  • crates.io へのアップロード

CLI

cargo

Examples:

# バージョン表示
cargo --version

# プロジェクト作成
cargo new <project>
cargo new --bin <project>

cargo check # コンパイル可能かチェック

# コンパイル。バイナリ生成
cargo build
cargo build --release # 最適化込み

cargo run   # バイナリを作らずに直接実行

参考:

Cargo.toml (manifest)

https://doc.rust-lang.org/cargo/reference/manifest.html

パッケージのメタデータや依存パッケージを記すマニフェストファイル。

参考:

Dependency tables

https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html

依存パッケージの情報を示すセクション。

  • [dependencies] … 実行時に必要なパッケージ
  • [dev-dependencies] … テストやベンチマークなどで必要なパッケージ
  • [build-dependencies] … ビルドに必要なパッケージ

Example:

[dependencies]
time = "0.1.12"

上は "^0.1.12" (caret requirement) と同じ扱いになる。
バージョン固定したい場合、 "= 0.1.12" と書く。詳しくは下を見よ。

バージョンの指定方法

様々な形式でバージョンを指定することができる。

Caret requirements(キャレット):

^1.2.3  :=  >=1.2.3, <2.0.0
^1.2    :=  >=1.2.0, <2.0.0
^1      :=  >=1.0.0, <2.0.0
^0.2.3  :=  >=0.2.3, <0.3.0
^0.2    :=  >=0.2.0, <0.3.0
^0.0.3  :=  >=0.0.3, <0.0.4
^0.0    :=  >=0.0.0, <0.1.0
^0      :=  >=0.0.0, <1.0.0

Tilde requirements(チルダ):

~1.2.3  := >=1.2.3, <1.3.0
~1.2    := >=1.2.0, <1.3.0
~1      := >=1.0.0, <2.0.0

Wildcard requirements(ワイルドカード):

*     := >=0.0.0
1.*   := >=1.0.0, <2.0.0
1.2.* := >=1.2.0, <1.3.0

Note:

  • crates.io では * だけの指定はNG

Comparison requirements:

>= 1.2.0
> 1
< 2
= 1.2.3

Multiple requirements:

  • 例: >= 1.2, < 1.5

パッケージ取得先の指定

Examples:

[dependencies]
# 独自レジストリ
some-crate = { version = "1.0", registry = "my-registry" }

# Gitロケーション
rand = { git = "https://github.com/rust-lang-nursery/rand" }
rand = { git = "https://github.com/rust-lang-nursery/rand", branch = "next" }

# ファイルシステム
hello_utils = { path = "hello_utils" }