来自同一个git存储库中具有冲突功能的货物构建软件包?

时间:2019-07-07 09:58:10

标签: rust rust-cargo

我有一个git存储库(不是crates.io),它具有不同的功能,我们将它们称为A和B,它们是互斥的-这两个功能公开了相同名称的结构和API,因此天真地编译它们会导致冲突和失败。

作为依赖包的开发人员,我想同时使用这两种功能。 我可以使用别名。如果我使用相同的git仓库URL,它将失败,但是如果在Cargo.toml中我使用两个不同的git仓库,则它可以工作:

[dependencies]
my_package_A = {package = "my_package", git = "/first/url", features = ["A"]}
my_package_B = {package = "my_package", git = "/second/url", features = ["B"]}

我想避免将存储库分叉到其他URL。 有办法吗?

1 个答案:

答案 0 :(得分:2)

货运功能允许将部分代码标记为可选,主要是允许将库的某些依赖项设为可选。它们无意用作常规软件配置机制。

在您描述的情况下,我建议将您的板条箱分成三个板条箱:一个具有基本功能,一个用于功能imageView.setImage(image),一个用于功能A。您可以将这三个板条箱保存在单个Cargo工作区和单个Git存储库中。然后,依赖的板条箱可以选择他们想要依赖的部件,即使对于具有多个板条实例的较大的依赖图,Cargo也会按计划解决。