Cargo.toml文件详细说明

以下是对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]部分的工作方式和相关配置:

  1. 成员包(Members):

    • 工作区可以包含多个成员包,这些成员包位于工作区的根目录下或者其子目录中。
    • 成员包通过[workspace].members数组指定,可以是相对路径或绝对路径。
  2. 根包(Root Package):

    • 工作区中的一个包被指定为根包,根包的Cargo.toml包含[workspace]部分而不是[package]部分。
    • 根包负责定义整个工作区的配置。
  3. 路径依赖(Path Dependencies):

    • 工作区中的包可以依赖其他成员包,这些依赖通过相对路径指定,而不是通过crates.io。
  4. 构建脚本(Build Scripts):

    • 如果工作区中的包使用构建脚本,构建脚本生成的文件将放置在工作区的根目录下的target目录中。
  5. 依赖项锁定(Dependency Locking):

    • 工作区中的所有包共享同一个Cargo.lock文件,确保所有包使用相同版本的依赖项。
  6. 配置覆盖(Configuration Overrides):

    • [workspace]部分中的[patch][replace]配置可以覆盖工作区中所有包的依赖项。
  7. 发布(Publishing):

    • 工作区作为一个整体发布,成员包不会单独发布到crates.io。
  8. 编译和测试(Building and Testing):

    • 使用Cargo命令(如cargo buildcargo test)时,可以针对工作区中的特定包或所有包进行操作。
  9. 工作区配置(Workspace Configuration):

    • [workspace]部分可以包含额外的配置,如metadata,提供给外部工具使用。
  10. 虚拟工作区(Virtual Workspace):

    • 如果Cargo.toml中没有[package]部分,它被称为虚拟工作区,这种情况下,Cargo会查找最近的包含[workspace]Cargo.toml作为工作区的根。

[workspace]部分的配置示例:

[workspace]
members = [
    "path/to/member1",
    "path/to/member2",
    "path/to/member3",
]

这个配置定义了一个工作区,其中包含三个成员包,分别位于指定的路径。工作区的根包将包含这个[workspace]部分,并可能包含其他配置,如依赖项覆盖或构建脚本配置。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页