如何在 Cargo.toml “依赖项”和“开发依赖项”下拉取具有不同功能的依赖项?

Ale*_*Sed 12 rust rust-cargo toml

假设您有一个名为“dep”的依赖项,它具有两个名为 f1 和 f2 的功能。我想在正常构建板条箱时将“dep”与 f1 功能一起使用,但在构建用于测试的板条箱时将它与 f2 一起使用。我知道 dev-dependencies 是我们测试所需的那些,并且认为 Cargo.toml 的以下结构应该可以工作:

    [dev-dependencies]
    dep = { version = "1.0.0", features = ["f2"] }
    
    [dependencies]
    dep = { version = "1.0.0", features = ["f1"] }
    
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_* jg 5

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

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

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