15

假设您有一个名为“dep”的依赖项,它有两个名为 f1 和 f2 的功能。当我正常构建我的 crate 时,我想将“dep”与 f1 功能一起使用,但在构建它进行测试时将它与 f2 一起使用。我知道开发依赖项是我们测试所需的,并且认为 Cargo.toml 的以下结构应该可以工作:

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

但是,看起来一旦我用“f1”引入“dep”,编译器就会忽略在 dev-dependencies 部分下提到的相同依赖项。另一方面,将依赖项设置为“可选”并不能解决问题,因为“dep”根本不会被引入测试。关于如何解决这个问题或很好地规避它的任何想法?

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

4

1 回答 1

1

使用解析器版本 2 的 rust 2021 可以做到这一点。如此处所述。具体来说,它是这样说的:

当这些相同的依赖项用作普通依赖项时,在 dev-dependencies 上启用的功能将不会统一,除非当前正在构建这些 dev-dependencies

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

于 2022-01-02T21:15:58.880 回答