Rust 笔记:Rust 之Cargo.toml

452 阅读2分钟

前言

Cargo.toml 文件是 Rust 项目中用来配置项目的核心文件。它定义了项目的元数据、依赖项和构建配置等。下面是 Cargo.toml 文件中各项配置的详细说明:

基本配置

  1. [package]

    • name: 项目的名称,必须是合法的 Rust 标识符。
    • version: 项目的版本号,遵循 语义化版本规范
    • authors: 作者信息,通常是一个字符串数组。
    • edition: Rust 语言的版本,常见的有 201520182021
    • description: 项目的简短描述。
    • homepage: 项目的主页 URL。
    • repository: 项目的源代码仓库 URL。
    • documentation: 项目的文档 URL。
    • license: 项目使用的许可证(例如,MITApache-2.0)。
    • readme: 指定项目的 README 文件。
    • keywords: 项目的关键词列表,用于分类。
    • categories: 项目的分类,通常用于 crates.io 的分类。
    • workspace: 指定项目是否属于一个工作区。
  2. [dependencies]

    • 定义项目的依赖项,可以指定版本、特性和其他配置。
    • 格式:
      [dependencies]
      serde = "1.0"
      rand = { version = "0.8", features = ["small_rng"] }
      
  3. [dev-dependencies]

    • 定义仅在开发和测试环境中使用的依赖项。
  4. [build-dependencies]

    • 定义在构建脚本中使用的依赖项。

特性配置

  1. [features]
    • 定义项目的可选功能。
    • 可以指定默认启用的功能。
    • 格式:
      [features]
      default = ["feature1"]
      feature1 = []
      feature2 = ["dependency/featureA"]
      

构建配置

  1. [build]
    • build: 指定构建脚本的路径,通常是 build.rs

工作区配置

  1. [workspace]
    • 定义工作区配置,允许多个包共享同一个 Cargo.lock 文件。
    • 格式:
      [workspace]
      members = ["member1", "member2"]
      

其他配置

  1. [patch]

    • 用于覆盖依赖项的特定版本或源。
    • 格式:
      [patch.crates-io]
      serde = { git = "https://github.com/serde-rs/serde", branch = "main" }
      
  2. [replace]

    • 类似于 patch,但用于替换整个 crate。
  3. [profile]

    • 配置不同构建类型的编译选项。
    • 常见的配置有 devreleasetestbench
    • 格式:
      [profile.release]
      opt-level = 3
      
  4. [badges]

    • 用于在 crates.io 上显示项目的徽章。
    • 格式:
      [badges]
      travis-ci = { repository = "username/repo" }
      
  5. [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,你可以灵活地管理项目的依赖、构建选项和其他重要的项目元数据。