十二、Rust 项目工具

170 阅读2分钟

十二、Rust 项目工具

1. 项目配置

  • 两个环境:devrelease

  • 配置的位置:Cargo.toml 文件

  • 配置项:[profile.dev][profile.release]

  • 配置示例:

    # 覆盖默认的开发配置
    [profile.dev]
    opt-level = 0 # 控制 rust 对代码的优化程度。取值:0,1,2,3。值越大,优化程度越高,编译时间越久
    
    # 覆盖默认的发布配置
    [profile.release]
    opt-level = 3
    
    
  • 完整的配置列表,请查看 Cargo 文档

2. 发布 crate

  • 文档注释
    • 注释风格
      • 常规文档注释:///
      • 包含注释的注释://!
    • 支持 Markdown 标记
    • 打开文档:cargo doc --open
    • 常用的文档注释块
      • Examples : 提供这个函数的有效示例
        • cargo test 也会运行示例代码!
      • Panics : 提供这个函数可能 panic! 的场景
      • Errors : 提供这个函数可能暴露什么错误,以及出现对应错误的原因
      • Safety : 提供期望函数调用者支持的、确保 unsafe 块中代码正常工作的不变条件
  • 发布开源 crate
    • 推送新版本:cargo publish
    • 撤回某个版本:cargo yank --vers x.y.z
    • 撤销某个撤回:cargo yank --vers x.y.z --undo

3. workspace

  • 类似于 Web 前端的 monorepo

  • cargo workspace

    • 一系列共享同样的 Cargo.lock 和输出目录的包的集合
      • 即:虽然有多个 Cargo.toml 文件,但只有根目录下的一个 Cargo.lock 文件
  • 创建步骤

    1. 首先创建这个 workspace 的根目录

    2. 然后在这个根目录下的 Cargo.toml 文件中指定 [members]

    3. 最后再通过在根目录下执行 cargo new <lib-name> 来创建 members 里的库

      # Cargo.toml 文件
      [workspace]
      members = [
        "adder",
        "add-one",
      ]
      
  • 一些特性

    • workspace 内的库可以相互依赖,可以按如下示例引入

      # adder/Cargo.toml 
      # 引入同一个 workspace 下的依赖
      [dependencies]
      add-one = { path = "../add-one" }
      
      
    • 同一个 workspace 下的库,如果多个库依赖了相同的一个外部 crate,那么 Cargo 会将其都解析为同一版本并记录到唯一的 Cargo.lock

  • 运行指定的 crate 的测试用例:cargo test -p <lib-name>

4. cargo 扩展包

  • 安装依赖
    • 安装命令: cargo install
    • 默认安装路径: $HOME/.cargo/bin
  • 自定义命令
    • 如果环境变量 $PATH 中有类似 cargo-something 的二进制文件,就可以通过 cargo something 来像 Cargo 子命令一样运行它
      • 这样的自定义命令也可以用 cargo --list 列出来