Rust工具链管理库cargo-msrv的使用:自动检测和设置项目最低支持Rust版本(MSRV)

Rust工具链管理库cargo-msrv的使用:自动检测和设置项目最低支持Rust版本(MSRV)

cargo-msrv简介

cargo-msrv是一个能帮助你查找Rust crate的最低支持Rust版本(MSRV)的工具库。

安装

通过cargo安装稳定版本

$ cargo install cargo-msrv --locked

通过git源码安装

# 安装稳定版本
$ cargo install --git https://github.com/foresterre/cargo-msrv.git --tag v0.18.4 cargo-msrv

# 安装开发版本  
$ cargo install --git https://github.com/foresterre/cargo-msrv.git cargo-msrv

使用示例

查找当前项目的MSRV

# 使用默认的cargo check命令检查兼容性
$ cargo msrv find

# 使用线性搜索(从最新版本开始逐个测试)
$ cargo msrv find --linear

# 指定项目目录
$ cargo msrv --path <dir> find

# 使用自定义命令检查兼容性
$ cargo msrv find -- cargo check --tests

验证项目指定的MSRV是否有效

$ cargo msrv verify

列出依赖项的MSRV

$ cargo msrv list

显示当前项目指定的MSRV

$ cargo msrv show

完整示例

下面是一个完整的使用示例,展示如何查找和设置项目的MSRV:

// 1. 首先安装cargo-msrv
// cargo install cargo-msrv

// 2. 在项目目录中运行以下命令查找MSRV
// cargo msrv find

// 示例输出:
// Searching for the Minimum Supported Rust Version (MSRV)...
// Testing with Rust 1.65.0... success
// Testing with Rust 1.60.0... success
// Testing with Rust 1.55.0... success
// Testing with Rust 1.50.0... failure
// Testing with Rust 1.53.0... success
// Testing with Rust 1.51.0... failure
// Testing with Rust 1.52.0... success
// 
// The MSRV is: 1.52.0

// 3. 将找到的MSRV设置到Cargo.toml中
// 在Cargo.toml中添加或修改:
/*
[package]
rust-version = "1.52.0"
*/

// 4. 验证设置的MSRV是否正确
// cargo msrv verify
// 如果验证通过会显示: MSRV 1.52.0 is verified

选项说明

Find your Minimum Supported Rust Version!

Usage: cargo msrv [OPTIONS] <COMMAND>

Commands:
  find    查找MSRV
  list    显示依赖项的MSRV
  set     设置当前crate的MSRV
  show    显示Cargo manifest中指定的MSRV
  verify  验证MSRV是否满足
  help    打印帮助信息

Options:
      --path <Crate Directory>
          指定cargo项目目录路径

      --manifest-path <Cargo Manifest>
          指定Cargo manifest文件路径

  -h, --help
          打印帮助信息

  -V, --version
          打印版本信息

用户输出选项:
      --output-format <FORMAT>
          设置用户输出格式
          [default: human]
          可选值:
          - human:   进度条输出到stderr
          - json:    Json状态更新输出到stdout
          - minimal: 最小输出,通常只显示结果

      --no-user-output
          禁用用户输出

JSON输出格式

可以通过--output-format json标志启用JSON输出格式:

$ cargo msrv find --output-format json

工作原理

cargo-msrv通过测试项目在不同Rust版本下的编译情况来确定最低支持的Rust版本。它默认使用二进制搜索算法来高效地确定MSRV,也可以使用线性搜索从最新版本开始逐个测试。

许可证

cargo-msrv采用双重许可:

  • Apache License, Version 2.0
  • MIT license

你可以选择其中任意一种许可证使用。


1 回复

Rust工具链管理库cargo-msrv的使用指南

简介

cargo-msrv是一个用于自动检测和设置项目最低支持Rust版本(MSRV, Minimum Supported Rust Version)的工具。它通过二分查找算法在Rust版本历史中自动测试你的项目,找出能成功编译的最旧Rust版本。

安装方法

cargo install cargo-msrv

基本使用方法

检测项目MSRV

cargo msrv

这个命令会自动:

  1. 从最新稳定版Rust开始
  2. 逐步测试更旧的版本
  3. 找到能编译项目的最旧版本

指定搜索范围

cargo msrv --min 1.40.0 --max 1.60.0

验证特定版本

cargo msrv verify --version 1.56.0

高级选项

自定义检查方式

默认使用cargo check,可以改为cargo build或运行测试:

cargo msrv --no-check --cargo-command build
cargo msrv --cargo-command test

输出结果格式

cargo msrv --output-format json

在CI中使用

cargo msrv --no-user-output --output-format json > msrv.json

配置项目MSRV

找到MSRV后,可以将其写入Cargo.toml:

[package]
rust-version = "1.56.0"

示例输出

Testing Rust 1.60.0... success
Testing Rust 1.55.0... success
Testing Rust 1.50.0... success
Testing Rust 1.45.0... failure
Testing Rust 1.47.0... success
Testing Rust 1.46.0... failure

Found MSRV: 1.47.0

完整示例

  1. 首先安装cargo-msrv:
cargo install cargo-msrv
  1. 在项目根目录下运行基本检测:
cargo msrv
  1. 如果需要限制检测范围(例如只检查1.50.0到1.60.0之间的版本):
cargo msrv --min 1.50.0 --max 1.60.0
  1. 验证特定版本是否兼容:
cargo msrv verify --version 1.56.0
  1. 使用build代替check进行验证:
cargo msrv --no-check --cargo-command build
  1. 将结果以JSON格式输出到文件(适用于CI环境):
cargo msrv --no-user-output --output-format json > msrv_result.json
  1. 找到MSRV后,更新项目的Cargo.toml文件:
[package]
name = "my_project"
version = "0.1.0"
rust-version = "1.56.0"  # 这里写入检测到的最低兼容版本

注意事项

  1. 测试过程可能需要较长时间,因为它会下载并安装多个Rust版本
  2. 建议在CI环境中使用--no-install选项配合预先安装的rustup工具链
  3. 某些依赖可能有比你的代码更高的版本要求,这会影响实际MSRV

cargo-msrv是管理项目兼容性的有力工具,特别适合需要支持多个Rust版本或确保向后兼容的库项目。

回到顶部