前言
Cargo.toml 文件是 Rust 项目中用来配置项目的核心文件。它定义了项目的元数据、依赖项和构建配置等。下面是 Cargo.toml 文件中各项配置的详细说明:
基本配置
-
[package]
name: 项目的名称,必须是合法的 Rust 标识符。version: 项目的版本号,遵循 语义化版本规范。authors: 作者信息,通常是一个字符串数组。edition: Rust 语言的版本,常见的有2015、2018和2021。description: 项目的简短描述。homepage: 项目的主页 URL。repository: 项目的源代码仓库 URL。documentation: 项目的文档 URL。license: 项目使用的许可证(例如,MIT、Apache-2.0)。readme: 指定项目的 README 文件。keywords: 项目的关键词列表,用于分类。categories: 项目的分类,通常用于 crates.io 的分类。workspace: 指定项目是否属于一个工作区。
-
[dependencies]
- 定义项目的依赖项,可以指定版本、特性和其他配置。
- 格式:
[dependencies] serde = "1.0" rand = { version = "0.8", features = ["small_rng"] }
-
[dev-dependencies]
- 定义仅在开发和测试环境中使用的依赖项。
-
[build-dependencies]
- 定义在构建脚本中使用的依赖项。
特性配置
- [features]
- 定义项目的可选功能。
- 可以指定默认启用的功能。
- 格式:
[features] default = ["feature1"] feature1 = [] feature2 = ["dependency/featureA"]
构建配置
- [build]
build: 指定构建脚本的路径,通常是build.rs。
工作区配置
- [workspace]
- 定义工作区配置,允许多个包共享同一个
Cargo.lock文件。 - 格式:
[workspace] members = ["member1", "member2"]
- 定义工作区配置,允许多个包共享同一个
其他配置
-
[patch]
- 用于覆盖依赖项的特定版本或源。
- 格式:
[patch.crates-io] serde = { git = "https://github.com/serde-rs/serde", branch = "main" }
-
[replace]
- 类似于
patch,但用于替换整个 crate。
- 类似于
-
[profile]
- 配置不同构建类型的编译选项。
- 常见的配置有
dev、release、test、bench。 - 格式:
[profile.release] opt-level = 3
-
[badges]
- 用于在 crates.io 上显示项目的徽章。
- 格式:
[badges] travis-ci = { repository = "username/repo" }
-
[package.metadata]
- 用于存储自定义的元数据,供其他工具使用。
- 格式:
[package.metadata] some_tool = { key = "value" }
示例
下面是一个完整的 Cargo.toml 示例,展示了以上配置:
[package]
name = "my_project"
version = "0.1.0"
authors = ["Your Name <your.email@example.com>"]
edition = "2021"
description = "A brief description of my project"
homepage = "https://example.com"
repository = "https://github.com/username/my_project"
documentation = "https://docs.rs/my_project"
license = "MIT"
readme = "README.md"
keywords = ["example", "cargo", "rust"]
categories = ["command-line-utilities"]
[dependencies]
serde = "1.0"
rand = { version = "0.8", features = ["small_rng"] }
[dev-dependencies]
tempfile = "3.1"
[build-dependencies]
cc = "1.0"
[features]
default = ["logging"]
logging = []
[workspace]
members = ["subcrate1", "subcrate2"]
[patch.crates-io]
serde = { git = "https://github.com/serde-rs/serde", branch = "main" }
[profile.release]
opt-level = 3
[badges]
travis-ci = { repository = "username/repo" }
[package.metadata]
some_tool = { key = "value" }
通过配置 Cargo.toml,你可以灵活地管理项目的依赖、构建选项和其他重要的项目元数据。