Cargo.toml文件详细说明
以下是对Cargo.toml
文件其主要部分的详细解释:
[package]
部分
Cargo.toml
的第一部分是[package]
,包含关于包的基本信息:
name
— 包的名称。version
— 遵循语义化版本控制的当前版本号。authors
— 包的作者列表。edition
— 指定Rust版本,如果不指定,默认为2015,最新稳定版是2021。rust-version
— 指定所需的最低Rust编译器版本。description
— 包的简短描述,crates.io会显示此描述。documentation
— 包文档的URL。readme
— 包的README文件路径。homepage
— 包主页的URL。repository
— 包源代码仓库的URL。license
— 包使用的许可证名称。license-file
— 包含许可证文本的文件路径。keywords
— 包的关键字列表,用于分类和检索。categories
— 包的分类列表。workspace
— 包所属工作区的路径。build
— 构建脚本的文件路径。links
— 包链接的本地库的名称。exclude
— 发布时排除的文件模式列表。include
— 发布时包含的文件模式列表。publish
— 控制包是否可以发布,可以设置为false
以阻止发布或指定允许发布的注册服务列表。metadata
— 提供给外部工具的额外设置。
目标配置
[lib]
— 库目标设置。[[bin]]
— 二进制目标设置,可以有多个以创建多个可执行文件。[[example]]
— 示例目标设置。[[test]]
— 测试目标设置。[[bench]]
— 基准测试目标设置。
依赖项
[dependencies]
— 包的库依赖。[dev-dependencies]
— 仅用于examples、tests和benchmarks的依赖。[build-dependencies]
— 构建脚本的依赖。
特性和配置
[features]
— 条件编译选项。[patch]
— 覆盖依赖项。[replace]
— 不推荐使用的依赖覆盖方式(已弃用)。[profile]
— 编译器设置和优化。[workspace]
— 工作区定义。
配置文件
配置文件允许您为每个包指定配置,甚至可以检入版本控制。您可以在主目录中使用配置文件指定默认值。
环境变量
Cargo也认可通过环境变量配置,环境变量的配置优先于TOML配置文件。
发布和维护状态
[badges]
部分用于在注册服务(如crates.io)上显示项目的状态信息,如维护状态。
这份说明覆盖了Cargo.toml
的主要部分和字段,根据实际项目的需求,可能还会有其他的配置项。
在Cargo.toml
文件中,[workspace]
部分用于定义和管理一个工作区(workspace)的配置,工作区可以包含多个成员包(package),其中一个是根包(root package)。以下是[workspace]
部分的工作方式和相关配置:
-
成员包(Members):
- 工作区可以包含多个成员包,这些成员包位于工作区的根目录下或者其子目录中。
- 成员包通过
[workspace].members
数组指定,可以是相对路径或绝对路径。
-
根包(Root Package):
- 工作区中的一个包被指定为根包,根包的
Cargo.toml
包含[workspace]
部分而不是[package]
部分。 - 根包负责定义整个工作区的配置。
- 工作区中的一个包被指定为根包,根包的
-
路径依赖(Path Dependencies):
- 工作区中的包可以依赖其他成员包,这些依赖通过相对路径指定,而不是通过crates.io。
-
构建脚本(Build Scripts):
- 如果工作区中的包使用构建脚本,构建脚本生成的文件将放置在工作区的根目录下的
target
目录中。
- 如果工作区中的包使用构建脚本,构建脚本生成的文件将放置在工作区的根目录下的
-
依赖项锁定(Dependency Locking):
- 工作区中的所有包共享同一个
Cargo.lock
文件,确保所有包使用相同版本的依赖项。
- 工作区中的所有包共享同一个
-
配置覆盖(Configuration Overrides):
[workspace]
部分中的[patch]
和[replace]
配置可以覆盖工作区中所有包的依赖项。
-
发布(Publishing):
- 工作区作为一个整体发布,成员包不会单独发布到crates.io。
-
编译和测试(Building and Testing):
- 使用Cargo命令(如
cargo build
或cargo test
)时,可以针对工作区中的特定包或所有包进行操作。
- 使用Cargo命令(如
-
工作区配置(Workspace Configuration):
[workspace]
部分可以包含额外的配置,如metadata
,提供给外部工具使用。
-
虚拟工作区(Virtual Workspace):
- 如果
Cargo.toml
中没有[package]
部分,它被称为虚拟工作区,这种情况下,Cargo会查找最近的包含[workspace]
的Cargo.toml
作为工作区的根。
- 如果
[workspace]
部分的配置示例:
|
|
这个配置定义了一个工作区,其中包含三个成员包,分别位于指定的路径。工作区的根包将包含这个[workspace]
部分,并可能包含其他配置,如依赖项覆盖或构建脚本配置。