Merge pull request #168 from huangjj27/bugfix/cargo-workspace

Bugfix/cargo workspace
This commit is contained in:
KaiserY 2018-03-09 08:29:44 +08:00 committed by GitHub
commit 02b4b98de0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -142,73 +142,6 @@ Hello, world! 10 plus one is 11!
这会运行 *adder/src/main.rs* 中的代码,其依赖 `add-one` crate 这会运行 *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 #### 在工作空间中依赖外部 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 还需注意的是工作空间只在根目录有一个 *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