Cargo: 拒绝未使用的继承默认特性
概要
- 如果工作区依赖项指定了
default-features = true
(或未指定default-features
),则不再允许在继承的工作区依赖项中使用default-features = false
。
详情
工作区继承 允许您在一个地方(工作区)指定依赖项,然后从包内引用这些工作区依赖项。在 default-features
的指定方式上存在一个无意的交互,这在 2024 Edition 中不再被允许。
除非工作区指定了 default-features = false
,否则不再允许在继承的包依赖项中指定 default-features = false
。例如,对于指定了以下内容的工作区:
[workspace.dependencies]
regex = "1.10.4"
以下代码现在会报错
[package]
name = "foo"
version = "1.0.0"
edition = "2024"
[dependencies]
regex = { workspace = true, default-features = false } # ERROR
此更改的原因是为了避免在默认特性已经启用时指定 default-features = false
造成的困惑,因为它不起任何作用。
如果您希望能够灵活地决定依赖项是否启用其依赖项的默认特性,请务必在工作区定义中设置 default-features = false
。 请注意,如果您同时构建多个工作区成员,特性将被统一,因此如果一个成员设置了 default-features = true
(如果未显式设置,则为默认值),则使用该依赖项的所有成员都将启用默认特性。
迁移
当使用 cargo fix --edition
时,Cargo 将自动更新您的 Cargo.toml
文件,以删除这种情况下的 default-features = false
。
如果您希望手动更新您的 Cargo.toml
文件,请检查在运行构建时是否有任何警告,并删除相应的条目。 之前的版本应该会显示类似以下内容:
warning: /home/project/Cargo.toml: `default-features` is ignored for regex,
since `default-features` was not specified for `workspace.dependencies.regex`,
this could become a hard error in the future