我在复杂的代码库中遇到了一个奇怪的问题,这可能是因为我没有正确理解货物功能在
[build-dependencies]
存在的情况下如何传播。
所以我有一个项目 X 依赖于依赖项 Y。该箱 Y 公开了一个货物功能,该功能永远不应该在最终构建中启用。
但是主项目 X 需要由 在构建时 启用的 Y 功能。因此,在 X 中,我在 Y 上有一个
[build-dependency]
,启用了该功能,在 Y 上有一个 [dependency]
,没有该功能。
看来,cargo 只会在启用该功能的情况下构建 Y ;它将使用构建脚本的功能来编译 Y,并将其重用于常规依赖项。我本来希望在没有该功能的情况下,cargo 会重新编译 Y。 如何在
[build-dependencies]
和
[dependencies]
之间统一/传播功能的详细信息是什么?阅读 https://doc.rust-lang.org/cargo/reference/specifying-dependency.html#build-dependency我只看到有关依赖项(而不是功能)的信息: 包本身及其构建脚本是单独构建的,因此它们的依赖关系不需要一致。
请注意,该项目正在使用
edition = "2021"
和
resolver = "2"
。感谢您的澄清!
使用旧的解析器 (
resolver = "1"
),Cargo 将统一
build-dependencies
和 dev-dependencies
之间的功能以及您的主代码。 但是,有了
resolver = "2"
,就不会。如果您设置了
resolver = "2"
并且 Cargo 仍在统一功能,则这是一个您可以报告的错误。