我正在学习生锈。作为猜谜游戏教程的一部分,我下载了兰特板条箱。我担心依赖的混乱,并且不希望下载比绝对必要更多的软件包。
因此,我将设置Cargo.toml
为:
[dependencies]
rand = "=0.5.5"
但是,我注意到下载了3个不同版本的rand_core以及libc。
Updating crates.io index
Downloaded rand_core v0.3.1
Downloaded rand_core v0.4.2
Downloaded rand v0.5.5
Downloaded rand_core v0.2.2
Downloaded libc v0.2.87
Downloaded 5 crates (702.2 KB) in 1.17s
Compiling libc v0.2.87
Compiling rand_core v0.4.2
Compiling rand_core v0.3.1
Compiling rand_core v0.2.2
Compiling rand v0.5.5
Compiling guessing_game v0.1.0 (/home/user/projects/learn-rust/guessing_game)
Finished dev [unoptimized + debuginfo] target(s) in 26.19s
Running `target/debug/guessing_game`
我在crates.io上转到rand页面0.5.5的依赖项页面,发现:
但是,任何地方都不需要依赖libc。
为什么要下载libc?
您可以cargo tree -i <CRATE>
用来查看什么取决于特定的板条箱:
$ cargo tree -i libc
libc v0.2.87
└── rand v0.5.5
└── guessing_game v0.1.0 (...)
因此,它是 rand
。rand 0.5.5的依赖项页面确实说这rand_core
是唯一需要的板条箱,但libc
被列为optional。这意味着它是由功能控制的。
您可以查看的输出cargo tree -i libc -e features
以查看已启用的功能,但是它并不是很简单,因为它显示了包装箱中启用的所有功能rand
,而不仅仅是启用了的功能libc
。
唯一可以肯定的方法是查看板条箱Cargo.toml
:
[features]
default = ["std"]
nightly = ["i128_support"]
std = ["rand_core/std", "alloc", "libc", "winapi", "cloudabi", "fuchsia-zircon"]
alloc = ["rand_core/alloc"]
i128_support = []
serde1 = ["serde", "serde_derive", "rand_core/serde1"]
[dependencies]
rand_core = { path = "rand_core", version = "0.2", default-features = false }
log = { version = "0.4", optional = true }
serde = { version = "1", optional = true }
serde_derive = { version = "1", optional = true }
[target.'cfg(unix)'.dependencies]
libc = { version = "0.2", optional = true }
特征libc
门和目标门也是如此。它仅依赖于unix
平台,并且仅在"std"
启用此功能(由by启用)时使用"default"
。您可以default-features = false
选择不使用它,但是要警告它最终将禁用大多数板条箱。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句