如何指定 Cargo 包所需的 Rust 版本?

问题描述 投票:0回答:6

是否可以指定 Cargo 包需要最低 Rust 版本,例如 1.1.0 才能编译?

rust rust-cargo
6个回答
20
投票

在 Rust 1.56.0 中你可以使用

rust-version
:

rust-version 字段是一个可选键,它告诉 Cargo 可以使用哪个版本的 Rust 语言和编译器来编译您的包。如果当前选择的 Rust 编译器版本比指定版本旧,cargo 将退出并显示错误,告诉用户需要什么版本。

[package]
rust-version = "1.56"

10
投票

您可以像这样使用构建脚本

extern crate rustc_version;

use std::io::{self, Write};
use std::process::exit;       
use rustc_version::version_matches;   

fn main() {
    if !version_matches(">= 1.1.0") {
        writeln!(&mut io::stderr(), "This crate requires rustc >= 1.1.0.").unwrap();
        exit(1);
    }   
}

这使用了 rustc_version 板条箱。


8
投票

如果您的项目需要最低 rustc 版本 1.1.0 进行编译,您只需在 Cargo.toml 文件所在的目录中创建一个名为 rust-toolchain (没有任何文件扩展名)的文件,并添加以下内容对它:

[toolchain]
channel = "1.1.0"
components = ["rust-src"]

然后当您运行

cargo build
时,它将自动下载并安装该版本并切换到它。请参阅此 Rust 博客文章 了解更多详细信息。

这个 Rust RFC #2495 提出了一种未来的替代方法,我们可以将行

rust = "1.1.0"
添加到 Cargo.toml 文件中。


4
投票

我在 Github 上发现了一些旧提案:

https://github.com/rust-lang/cargo/issues/837
https://github.com/rust-lang/cargo/issues/1044
https://github.com/rust-lang/cargo/issues/1214

他们关闭了

我认为目前这张票中没有太多可操作的内容,我同意我们肯定会想要重新评估 1.0 后,但目前我不认为 Cargo 会进入支持各种 Rust 的业务版本,因为它目前太不稳定而无法跟踪。

所以好像还没有办法。也许你应该在那里提出你的案子。


1
投票

没有。

截至目前,您唯一能实际做的就是记下文档中所需的版本和/或板条箱的

README

您可以配置

multirust
以使用正确的编译器,但请记住它仅适用于 UNIX-y 环境。


-1
投票

如果您使用 Travis,您可以配置支持哪些 Rust 版本以及哪些通道。这是记录它的常见方法。

© www.soinside.com 2019 - 2024. All rights reserved.