在弄清楚相同代码的货物构建之后:虚假的编译时错误?,我想知道如何防止这样的问题:
$ cargo new feature_merge
$ cargo add nmea
$ cargo check > /dev/null 2>&1 && echo "success"
success
$ cargo add cexpr
$ cargo check > /dev/null 2>&1 || echo "failed"
failed
$ cargo rm cexpr && cargo check > /dev/null 2>&1 && echo "success"
success
我在不修改任何代码的情况下删除/添加了依赖项,这会影响构建结果。
正如我所描述的,问题的根源是cexpr依赖于 nom ,如下所示:
nom = {version = "^3", features = ["verbose-errors"] }
而nmea像这样描述依赖关系:
nom = "3.1.0"
只有 nmea 作为依赖项,Cargo 使用一组特征构建 nom,而 Cargo 使用另一组特征针对 nom 构建 cexpr 和 nmea。
我想要一种方法来防止我维护的 nmea 板条箱的这种错误使用。
我想要一个编译时错误"`nom` compiled with wrong features"
,或者强制 Cargo 构建 nom 的两个变体。
我尝试过这样的事情nmea/Cargo.toml
:
nom = { version = "3.1.0", default-features = false }
这没有任何改变;当 cexpr 和 nmea 组合时仍然存在编译时错误。