如何让Bazel列出测试目标并仅构建含测试目标的子目录?
问题解答
1. 不构建/测试列出所有测试目标
完全可以实现,用Bazel的query命令就能直接列出所有测试目标,无需实际构建或测试。执行以下命令:
bazel query 'tests(//...)'
如果只想针对你的200个子目录范围,把//...替换成对应路径前缀即可,比如//your-subdirs/...。
2. 统计含测试目标的目录数量
通过组合bazel query和文本处理命令,能快速统计出符合条件的目录数:
bazel query 'tests(//...)' | sed 's/:.*//' | sort | uniq | wc -l
各部分作用:
bazel query 'tests(//...)':输出所有测试目标,格式为//path/to/package:test_targetsed 's/:.*//':去掉冒号及后续的测试目标名,仅保留目录路径sort | uniq:对目录路径去重,得到唯一目录列表wc -l:统计最终的目录数量
3. 仅构建含测试目标的目录
无需手动写循环,Bazel支持直接基于查询结果批量构建:
bazel build $(bazel query 'tests(//...)' | sed 's/:.*//' | sort | uniq)
如果坚持要用循环实现,也可以把目录提取后遍历执行构建:
for dir in $(bazel query 'tests(//...)' | sed 's/:.*//' | sort | uniq); do bazel build $dir done
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

