如何对 Cargo.toml 的每个功能单独运行货物检查/测试?

Rod*_*igo 6 conditional-compilation rust rust-cargo

Cargo 功能允许条件编译,因此最终版本将仅包含可由最终用户过滤的特定功能组。

现在,根据库箱的复杂性,您可能会以形成依赖树的几个功能结束,例如:

[features]
banana = []
avocado = []
pineapple = ["avocado"]
orange = ["pineapple", "banana"]
Run Code Online (Sandbox Code Playgroud)

很自然,除此之外cargo check|test --all-features,我会希望cargo check|test --features banana在每一项单独的功能上运行,以确保它们能够独立运行。目前,我正在使用一个粗略的 shell 脚本来完成此操作,并手动提供这些功能。如果我添加一个新功能但忘记将其添加到脚本中,我就会遇到麻烦。

FEATS=(banana avocado pineapple orange)

for FEAT in "${FEATS[@]}" ; do
    echo "$FEAT..."
    cargo check --features "$FEAT"
    #cargo test --features "$FEAT"
done
Run Code Online (Sandbox Code Playgroud)

那么,是否有任何自动化方法可以cargo check|test --features banana逐一运行每个功能,然后报告已发现的警告/错误?

Kev*_*eid 4

我最近发现taiki-e/cargo-hack哪个声称可以处理这个问题。我自己没试过。

Cargo-Hack 基本上是 Cargo 的包装,它将子命令和大多数传递的标志传播给 Cargo,但提供了额外的标志并更改了一些现有标志的行为。

--each-feature

对每个功能执行,包括默认功能和--no-default-features包的功能。

这对于检查每个功能是否正常工作非常有用。