RustのCargo.tomlのメモ。
Cargo.tomlはRustアプリケーションの設定を記述するファイル。
ライブラリーターゲット(ビルドしたときに何が生成されるか)の設定。
| crate-type | 説明 |
|---|---|
lib |
通常のRustライブラリー。 |
cdylib |
他言語から呼ぶためのシステムライブラリーのファイル(Unixの*.so、Windowsの*.dll)を生成する。 |
[lib] crate-type = ["cdylib"]
依存ライブラリー(クレート)の設定。
通常は「クレート名 = "バージョン"」という書き方をすることが多い。
これは「クレート名 = { version = "バージョン" }」と同じ。
[dependencies] log = "0.4.26"
cargo addコマンドを使うと、指定したクレートの最新バージョンを(crates.ioから)見つけ、自動的にCargo.tomlに追加してくれる。
ローカルのクレートを使用したい場合は、pathで指定する。
[dependencies]
my_crate = { path = "../my_crate_dir" }
対象クレートにいくつかのフィーチャー(機能)があってデフォルトでは無効になっている場合は、使いたいフィーチャーを指定する。
[dependencies]
tokio = { version = "1.42.0", features = ["rt-multi-thread", "io-util", "net", "sync", "time"] }
デフォルトのフィーチャーを無効にしたい場合は「default-features = false」を加える。
[dependencies]
tokio = { version = "1.42.0", default-features = false, features = ["rt-multi-thread", "io-util", "net", "sync", "time"] }
依存関係(dependencies)を上書きする。
例えば以下のように書くと、リリースされるときには指定されたバージョンのクレートが使われ、開発時はpathで指定した場所のクレートが使われる。
[dependencies]
my_crate = "0.1.0"
[patch.crates-io]
my_crate = { path = "../my_crate_dir" }
条件付きコンパイル。
指定されたフィーチャーのときだけ使用するライブラリー(クレート)の設定。
フィーチャーが指定されたときだけ使用したいライブラリー(クレート)は、dependenciesで「optional
= true」にする。
そして、featuresで機能名を付ける。(下記の例だとwith_bigdecimalやwith_rust_decimal)
defaultという名前は特別で、使う側が何のフィーチャーも指定しなかったときのデフォルトとして使われる。
[dependencies]
bigdecimal = { version = "0.4.7", optional = true }
rust_decimal = { version = "1.36.0", optional = true }
[features]
default = ["with_bigdecimal", "with_rust_decimal"]
with_bigdecimal = ["bigdecimal"]
with_rust_decimal = ["rust_decimal"]
ソースコード上で機能に応じたコーディングをするにはcfg属性を使用する。
#[cfg(feature = "with_bigdecimal")]
fn example() {
use bigdecimal::*;
let value = BigDecimal::from_i32(123).unwrap();
println!("{}", value);
}
ビルドするときは--featuresで機能名を指定する。
cargo build --features with_bigdecimal
このクレートを使う側は、dependenciesのfeaturesで機能名を指定する。
[dependencies]
tsubakuro-rust-core = { version = "0.1.0", default-features = false, features = ["with_bigdecimal"] }