是否可以指定一个Cargo项目需要最低的Rustc版本,例如1.1.0来进行编译?
在 Rust 1.56.0 版本中,你可以使用 rust-version
:
rust-version
是一个可选的字段,用于告诉 Cargo 可以使用哪个版本的 Rust 语言和编译器来编译你的包。如果当前选择的 Rust 编译器版本比已声明的版本旧,则 Cargo 将以错误的形式退出,并告诉用户需要的版本。
[package]
rust-version = "1.56"
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 的包。
rustc_version
0.2 uses if version().unwrap() >= Version::parse("1.4.0").unwrap() { println!("cargo:rustc-cfg=compiler_has_important_bugfix"); }
- wegry如果您的项目要求最低的 rustc 版本为 1.1.0 才能编译,您可以在与 Cargo.toml 文件相同的目录下创建一个名为 rust-toolchain(不带任何文件扩展名)的文件,并将以下内容添加到其中:
[toolchain]
channel = "1.1.0"
components = ["rust-src"]
当你运行 cargo build
时,它会自动下载和安装对应版本,并切换至该版本。详情请参阅Rust博客文章。
这个Rust RFC #2495 提出了一种未来的替代方案,在那种情况下,我们只需要在Cargo.toml文件中添加一行rust = "1.1.0"
即可。
我在 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 版发布后重新评估,但目前我认为货物不会进入支持各种 Rust 版本的业务,因为目前跟踪起来太不稳定了。
所以目前似乎还没有办法。也许你应该在那里提出你的问题。
rustup upgrade
即可。 - Stargateur