清理Bazel中无法访问的生成文件

时间:2019-03-09 17:11:16

标签: bazel

假设我有一个非常小的项目,其中有一个空的WORKSPACE和一个在项目根目录定义的包,该包仅使用touch创建一个名为a的文件,如下所示:< / p>

genrule(
  name = "target",
  cmd = "touch $@",
  outs = ["a"],
)

如果我现在跑步

bazel build //:target

该软件包将被“构建”,并且a文件将在bazel-genfiles下可用。

假设我现在更改BUILD,以将输出写入另一个文件,如下所示:

genrule(
  name = "target",
  cmd = "touch $@",
  outs = ["b"],
)

建立相同的目标将导致文件bbazel-genfiles下可用。尽管a仍会存在,即使在构建定义的上下文中它“不可到达”。

是否有一种方法可以要求Bazel执行某种“垃圾收集”,并删除由先前版本生成的文件(以及其他可能包含的其他内容),这些文件根据当前版本定义不再可以访问,而又无需摆脱整个目录? bazel clean命令似乎采用了后一种行为。

There seems to be a feature in the works,但显然不能按需执行,而是在达到特定阈值后自动执行。

2 个答案:

答案 0 :(得分:0)

bazel clean是删除这些内容的方法。

如果您使用沙箱构建,则过时的输出对于操作是不可见的。 (在Windows上尚不可用,仅在Linux和macOS上可用。)

这些文件会造成什么麻烦?

答案 1 :(得分:0)

请注意,运行 bazel clean 实际上不会删除外部目录。要删除所有外部工件,请使用 bazel clean --expunge