diff --git a/src/ch14-03-cargo-workspaces.md b/src/ch14-03-cargo-workspaces.md index 06490b8..da5fb44 100644 --- a/src/ch14-03-cargo-workspaces.md +++ b/src/ch14-03-cargo-workspaces.md @@ -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` 函数的实现: - -文件名: add-one/src/lib.rs - -```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)); -} -``` - -示例 14-12:使用来自 `adder` crate 的库 crate `add-one` - -在 *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: