Rust从入门到实战系列一百六十三:在工作空间中依赖外部包

还需注意的是工作空间只在根目录有一个 Cargo.lock,而不是在每一个 crate 目录都有 Cargo.lock。这
确保了所有的 crate 都使用完全相同版本的依赖。如果在 Cargo.toml 和 add−one∕Cargo.toml 中都增加
rand crate,则 Cargo 会将其都解析为同一版本并记录到唯一的 Cargo.lock 中。使得工作空间中的所
有 crate 都使用相同的依赖意味着其中的 crate 都是相互兼容的。让我们在 add−one∕Cargo.toml 中的
[dependencies] 部分增加 rand crate 以便能够在 add−one crate 中使用 rand crate:
文件名: add-one∕Cargo.toml
[dependencies]
rand = “0.8.3”
现在就可以在 add−one∕src∕lib.rs 中增加 use rand; 了,接着在 add 目录运行 cargo build 构建整个工作
空间就会引入并编译 rand crate:
$ cargo build
Updating crates.io index
Downloaded rand v0.8.3
–snip–
Compiling rand v0.8.3
Compiling add_one v0.1.0 (file:///projects/add/add_one)
warning: unused import: rand
–> add_one/src/lib.rs:1:5
|
1 | use rand;
| ^^^^
|
= note: #[warn(unused_imports)] on by default
warning: 1 warning emitted
Compiling adder v0.1.0 (file:///projects/add/adder)
Finished dev [unoptimized + debuginfo] target(s) in 10.18s
现在顶级的 Cargo.lock 包含了 add−one 的 rand 依赖的信息。然而,即使 rand 被用于工作空间的某处,
也不能在其他 crate 中使用它,除非也在他们的 Cargo.toml 中加入 rand。例如,如果在顶级的 adder
crate 的 adder∕src∕main.rs 中增加 use rand;,会得到一个错误:
$ cargo build
–snip–
Compiling adder v0.1.0 (file:///projects/add/adder)
error[E0432]: unresolved import rand
–> adder/src/main.rs:2:5
|
2 | use rand;
| ^^^^ no external crate rand
为了修复这个错误,修改顶级 adder crate 的 Cargo.toml 来表明 rand 也是这个 crate 的依赖。构
建 adder crate 会将 rand 加入到 Cargo.lock 中 adder 的依赖列表中,但是这并不会下载 rand 的额
外拷贝。Cargo 确保了工作空间中任何使用 rand 的 crate 都采用相同的版本。在整个工作空间中使
用相同版本的 rand 节省了空间,因为这样就无需多个拷贝并确保了工作空间中的 crate 将是相互兼容的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值