You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对Cargo.toml中的每个Feature单独执行cargo check/test命令?

自动化检测每个Cargo Feature的方法

当然有更优雅的自动化方式,不用手动维护feature列表,下面介绍两种实用方案:


方案1:改进Shell脚本,自动提取Features

你可以通过解析Cargo.toml自动获取所有feature名称,彻底摆脱手动更新数组的麻烦。这里用awk实现(无需额外依赖):

#!/bin/bash
set -euo pipefail

# 从Cargo.toml提取[features]区块下的所有feature名称
FEATS=$(awk '
    /^\[features\]$/ { in_features=1; next }
    /^\[/ { in_features=0 }
    in_features && /^[a-zA-Z0-9_-]+ =/ { print $1 }
' Cargo.toml)

# 遍历每个feature执行check(可按需添加test)
for FEAT in $FEATS; do
    echo -e "\n=== 🔍 Checking feature: *$FEAT* ==="
    cargo check --features "$FEAT"
    
    # 若需要执行测试,取消下面注释
    # echo -e "\n=== 🧪 Testing feature: *$FEAT* ==="
    # cargo test --features "$FEAT"
done

echo -e "\n✅ 所有Feature检测完成!"

脚本说明:

  • awk代码会精准定位到[features]区块,自动提取每一行的feature名称(即=左侧的字符串)
  • set -euo pipefail让脚本在出错时立即终止,避免后续无效执行
  • 新增feature后,脚本会自动识别,完全不需要手动修改

方案2:使用cargo hack工具(推荐)

如果你的项目feature依赖树比较复杂,推荐用专门的Cargo工具cargo hack——它就是为批量处理feature相关的构建/测试任务而生的,功能非常强大。

步骤:

  1. 安装工具:
cargo install cargo-hack
  1. 批量检测每个feature:
# 对每个独立feature执行cargo check
cargo hack check --each-feature

# 对每个独立feature执行cargo test
cargo hack test --each-feature

进阶用法:

  • 排除特定feature(比如默认feature):
cargo hack check --each-feature --exclude-features default
  • 检测所有feature组合(比如两两组合):
cargo hack check --feature-powerset
  • 跳过dev依赖加速检测:
cargo hack check --each-feature --no-dev-deps

方案对比

方案优点缺点
自定义Shell脚本无需额外依赖,轻量灵活处理复杂feature树能力有限
cargo hack功能丰富,支持复杂场景需要额外安装工具

根据你的项目复杂度选择即可,一般推荐cargo hack,它能帮你处理很多边缘情况(比如feature依赖、optional依赖关联的feature等)。

内容的提问来源于stack exchange,提问作者rodrigocfd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:27:36