在限制项目的 Rust 版本时,如何确保 Cargo 选择正确的兼容版本的 crate?

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

我正在为

bitbake
设置 Rust 配方,这是 Yocto 项目的一部分。

我的目标 Yocto 使用 Rust 1.63,因为我自己的 PC 上安装了 1.72,所以我使用

rustup install 1.63.0
来确保我的版本与 Yocto 工具链相同,然后我在我的
Cargo.toml
中设置它:

[package]
rust-version = "1.63"

但是,当我执行

cargo add clap -F derive
时,它会添加版本 4.4.4,从而引入
clap_derive/4.4.2
。当我尝试使用
bitbake
构建此程序时,错误是
clap_derive/4.4.2
需要 rustc 1.70.0 或更高版本:

| error: package `clap_derive v4.4.2` cannot be built because it requires rustc 1.70.0 or newer, while the currently active rustc version is 1.63.0

我的印象是

cargo add
足够聪明,可以处理这种依赖性——这不是真的吗?如果不能,推荐的方法是什么来查找最新的兼容版本的板条箱?

请注意,手动

cargo check
根本不会引发错误 - 事实上,我可以使用 1.63.0 手动
cargo build
而不会遇到此错误,只有 bitbake 构建报告它,这是一个更受控制和“更干净”的方法搭建环境。即使编译器版本太旧,我的手动构建是否可以进行一些缓存以使构建成功?请注意,在将
rust-version
行添加到
Cargo.toml
之前,我是使用 1.72.0 手动构建的,所以也许这会以某种方式导致 1.63 构建成功?

rust dependencies rust-cargo restriction rust-crates
1个回答
0
投票

rustup install
实际上并没有默认切换到该编译器版本。尝试使用
cargo +1.63.0 check
进行构建、使用
rustup default 1.63
或创建
rust-toolchain
文件(仅包含字符串
1.63
)。此外,
rust-version
标志指定最低版本。因此,
cargo add
可以随意忽略它(但我认为它也不会尊重
rust-toolchain
文件,所以它也不聪明)。

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