首页 > 解决方案 > bazel 在不同的测试目标之间共享文件

问题描述

我知道 bazel 在隔离的沙箱中运行所有命令,但是,我想故意破坏它们。假设我有一个具有以下布局的项目:

.
├── BUILD
├── cpp
│   ├── BUILD
│   ├── foo.cpp
│   └── test_foo.cpp
├── python
│   ├── BUILD
│   ├── foo.py
│   └── test_foo.py
└── WORKSPACE

该文件python/BUILD包含一个py_test规则,该规则运行一些留下一些工件(假设是一些二进制文件)的 python 测试。该文件cpp/BUILD包含一个cc_test运行一些 cpp 测试的规则,这些测试需要 python 测试留下的工件。

问题是我怎么能做到这一点?如果可能的解决方案能够提供增量构建系统的所有优点,例如,如果它们比工件更旧,则不运行 python 测试等等,那就更好了。

标签: bazel

解决方案


生成测试代码的标准方法是genrule,请参阅python 脚本的示例。有了genrule目标(比如说//path/to:foo_gen)之后,您所要做的就是将标签添加到cc_test data属性中:

cc_test(
  data = ['/path/to:foo_gen'],
...
)

outs的属性中指定的文件genrule(参见上面的示例)将在路径中可用./path/to/file_specified_in_outs


推荐阅读