我有两个功能:feature_1
和feature_2
:
[features]
default = ["feature_1"]
feature_1 = []
feature_2 = []
我想让用户一次只选择其中一个,因为同时选择两个将导致重复某些重要代码和其他一些原因。我怎么能这样做?
答案 0 :(得分:4)
从根本上说,你不能。货物特征是附加的,并且可以通过依赖关系树中的任何包来启用功能。 Cargo部分隐含的假设是总是有效启用其他功能。
更重要的是,功能不仅仅是请求,而是需求。如果一个箱子需要feature_1
,而另一个箱子需要feature_2
,那么您有两个不可能一起工作的箱子。 Cargo(和Rust本身)竭尽全力尝试让这种情况难以创造。
最佳解决方案是更改您的包装箱的编写方式,以便同时启用这两种功能。如果这真的不可能,那么你所做的最好就是阻止编译成功。这可以通过用于检测不兼容功能的crate的构建脚本来完成,也可以通过在包中启用非编译代码来启用,只有在启用了不兼容的功能时才会启用。
答案 1 :(得分:0)
就其价值而言,我选择使用这种方法:
#[cfg(all(feature = "feature_1", feature = "feature_2"))]
compile_error!("Feature 1 and 2 are mutually exclusive and cannot be enabled together");
我希望它能帮助其他人寻找解决同一问题的方法。