面试题答案
一键面试工作区根目录的 Cargo.toml
配置
-
定义工作区:在工作区根目录的
Cargo.toml
文件中,通过[workspace]
部分来定义工作区。例如,假设目录结构如下:my_workspace/ Cargo.toml package1/ Cargo.toml src/ main.rs package2/ Cargo.toml src/ lib.rs
在
my_workspace/Cargo.toml
中:[workspace] members = [ "package1", "package2" ]
这里
members
数组列出了工作区内的各个包。 -
依赖管理:对于工作区内所有包可能共享的依赖,可以在工作区根目录的
Cargo.toml
中使用[workspace.dependencies]
部分进行声明。例如,如果package1
和package2
都依赖serde
库:[workspace] members = [ "package1", "package2" ] [workspace.dependencies] serde = "1.0"
这样所有工作区内的包都会使用相同版本的
serde
,避免版本冲突。
各个包自身的 Cargo.toml
配置
-
本地依赖:如果
package1
依赖package2
,在package1/Cargo.toml
中配置:[dependencies] package2 = { path = "../package2" }
这里使用
path
表明是同一工作区内的本地依赖。 -
外部依赖:如果某个包有自己特有的外部依赖,直接在该包的
Cargo.toml
的[dependencies]
部分声明。例如,package1
除了共享的serde
依赖外,还依赖rand
库:[dependencies] package2 = { path = "../package2" } rand = "0.8"
不同环境下的稳定构建
- 开发环境:在开发过程中,可以使用
cargo build
或cargo run
在工作区根目录下构建或运行工作区内的包。Cargo 会自动处理依赖关系,根据工作区根目录和各个包的Cargo.toml
配置来下载和构建依赖。 - 测试环境:使用
cargo test
在工作区根目录下运行所有包的测试。由于依赖在工作区层面进行了统一管理,测试环境能保证与开发环境的依赖一致性。 - 发布环境:在发布时,使用
cargo publish
。确保在工作区根目录下运行cargo publish
之前,各个包的版本号在其各自的Cargo.toml
中正确设置。例如,在package1/Cargo.toml
中:
并且工作区根目录的[package] name = "package1" version = "0.1.0"
Cargo.lock
文件是最新的,以确保发布的版本与开发和测试环境使用的依赖版本一致。Cargo 会自动处理依赖的发布,保证依赖的完整性和版本一致性。