如何在 Cargo.toml "dependencies"和"dev-dependencies"下拉取具有不同功能的依赖项?



假设您有一个名为"dep";其具有称为f1和f2的两个特征。我想使用";dep";当我正常构建机箱时使用f1功能,但在构建测试时使用f2功能。我知道开发依赖性是我们测试所需要的,并认为Cargo.toml的以下结构应该有效:

[dev-dependencies]
dep = { version = "1.0.0", features = ["f2"] }

[dependencies]
dep = { version = "1.0.0", features = ["f1"] }

然而,它看起来像是一旦我把";dep";用";f1〃;,编译器将忽略dev-dependences部分中提到的相同依赖项。另一方面;可选的";不会解决问题,因为这样";dep";根本不会参加考试。关于如何解决或很好地规避这个问题,有什么想法吗?

附言:我注意到这里正在跟踪这个问题:https://github.com/rust-lang/cargo/issues/7916.因此,目前,我只能期待受访者提供好的解决方案。

这在使用解析器版本2的rust 2021中是可能的。如本文所述。具体来说是这样的:

当这些相同的依赖项用作正常依赖项时,在开发依赖项上启用的功能将不会统一,除非这些开发依赖项当前正在构建

为了做到这一点,您需要根包具有edition = "2021",然后您可以在机箱清单中使用resolver = "2"来启用所需的行为。

最新更新