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"] }