假设我有一个非常小的项目,其中有一个空的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"],
)
建立相同的目标将导致文件b
在bazel-genfiles
下可用。尽管a
仍会存在,即使在构建定义的上下文中它“不可到达”。
是否有一种方法可以要求Bazel执行某种“垃圾收集”,并删除由先前版本生成的文件(以及其他可能包含的其他内容),这些文件根据当前版本定义不再可以访问,而又无需摆脱整个目录? bazel clean
命令似乎采用了后一种行为。
There seems to be a feature in the works,但显然不能按需执行,而是在达到特定阈值后自动执行。
答案 0 :(得分:0)
bazel clean
是删除这些内容的方法。
如果您使用沙箱构建,则过时的输出对于操作是不可见的。 (在Windows上尚不可用,仅在Linux和macOS上可用。)
这些文件会造成什么麻烦?
答案 1 :(得分:0)
请注意,运行 bazel clean
实际上不会删除外部目录。要删除所有外部工件,请使用 bazel clean --expunge