假设您有一个名为“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。所以目前,我只能期待受访者提供好的解决方法。
正如这里明确提到的,开发依赖项不能是可选的。其根本原因是什么?
这是可选开发依赖项可能有用且重要的示例:假设您有一个包 A,它需要包 B 来进行测试。然而,当您测试包 A 时,在某些情况下,您指定了一个特定的功能:
cargo test --package A --features "F1"
当选择功能“F1”时,您可以选择以不同的方式指定 B 的开发依赖性,这似乎是合法的。但是,如果您的开发依赖性已经被拉入(非可选),您似乎无法控制它!