mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-08 16:21:19 +08:00
Merge pull request #168 from huangjj27/bugfix/cargo-workspace
Bugfix/cargo workspace
This commit is contained in:
commit
02b4b98de0
@ -142,73 +142,6 @@ Hello, world! 10 plus one is 11!
|
||||
这会运行 *adder/src/main.rs* 中的代码,其依赖 `add-one` crate
|
||||
|
||||
|
||||
|
||||
|
||||
接下来,在 `adder` 目录中生成 `add-one` crate:
|
||||
|
||||
```text
|
||||
$ cargo new add-one
|
||||
Created library `add-one` project
|
||||
```
|
||||
|
||||
现在 `adder` 目录应该有如下目录和文件:
|
||||
|
||||
```text
|
||||
├── Cargo.toml
|
||||
├── add-one
|
||||
│ ├── Cargo.toml
|
||||
│ └── src
|
||||
│ └── lib.rs
|
||||
└── src
|
||||
└── main.rs
|
||||
```
|
||||
|
||||
在 *add-one/src/lib.rs* 中增加 `add_one` 函数的实现:
|
||||
|
||||
<span class="filename">文件名: add-one/src/lib.rs</span>
|
||||
|
||||
```rust
|
||||
pub fn add_one(x: i32) -> i32 {
|
||||
x + 1
|
||||
}
|
||||
```
|
||||
|
||||
打开 `adder` 的 *src/main.rs* 并增加一行 `extern crate` 将新的 `add-one` 库引入作用域,并修改 `main` 函数来调用 `add_one` 函数,如示例 14-12 所示:
|
||||
|
||||
```rust,ignore
|
||||
extern crate add_one;
|
||||
|
||||
fn main() {
|
||||
let num = 10;
|
||||
println!("Hello, world! {} plus one is {}!", num, add_one::add_one(num));
|
||||
}
|
||||
```
|
||||
|
||||
<span class="caption">示例 14-12:使用来自 `adder` crate 的库 crate `add-one`</span>
|
||||
|
||||
在 *adder* 目录下运行 `cargo build` 来构建 `adder` crate!
|
||||
|
||||
```text
|
||||
$ cargo build
|
||||
Compiling add-one v0.1.0 (file:///projects/adder/add-one)
|
||||
Compiling adder v0.1.0 (file:///projects/adder)
|
||||
Finished dev [unoptimized + debuginfo] target(s) in 0.68 secs
|
||||
```
|
||||
|
||||
注意这会构建 `adder` crate 和 *adder/add-one* 中的 `add-one` crate。现在 *adder* 目录中应该有这些文件:
|
||||
|
||||
```text
|
||||
├── Cargo.lock
|
||||
├── Cargo.toml
|
||||
├── add-one
|
||||
│ ├── Cargo.toml
|
||||
│ └── src
|
||||
│ └── lib.rs
|
||||
├── src
|
||||
│ └── main.rs
|
||||
└── target
|
||||
```
|
||||
|
||||
#### 在工作空间中依赖外部 crate
|
||||
|
||||
还需注意的是工作空间只在根目录有一个 *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:
|
||||
|
Loading…
Reference in New Issue
Block a user