Bazel中的传入和传出边缘过渡

时间:2019-12-06 11:15:12

标签: build bazel

文档对这两者进行了如下解释:

  

可以在两个位置附加转换:输入边缘和输出边缘。有效地,这意味着规则可以转换其自己的配置(传入边缘转换)并转换其依赖项的配置(传出边缘转换)

这引出了我的第一个问题:

问题1)传入的过渡会更改其自身的并且仅更改其自身的配置,还是会更改其自身的及其所有依赖项? >我假设是后者,但至少对我而言,文档中的措辞建议使用前者。

我的下一个问题是如何执行它们。我已尝试将以下内容尽可能抽象化,如果更准确的话,我会这样做。假设我有一个目标A取决于目标B和目标B',其中目标B和B'分别取决于目标C和C':

A-> B-> C和A-> B'-> C'。

执行输出边缘过渡时,我发现它可以“按预期的方式工作”-配置从A到B和B',然后从B到C,从B'到C'。也就是说,C是使用B'的配置构建的,而C'是使用B'的配置构建的。

但是,当我执行相同的过渡但将其附加到传入边缘时,其行为是不同的。如果我在列出A的来源时在B'之前列出B,我发现C和C'都是使用B的配置两者构建的(并且如果B'在B之前列出,则C和C'是两者都是使用B')的配置构建的。

尝试调试此操作,我在转换实现中添加了一张打印纸,以了解何时以及由谁运行转换并构建目标A。  -外边缘: 这表明该转换对A使用一次,对B使用一次,对B'使用一次。说得通。

  • 传入边缘:  这表明转换对目标A使用了两次,然后对目标B使用了一次(或首先列出的那个)。令人困惑。

问题2)转换实施代码何时实际运行,传入和传出转换之间有何区别?

我怀疑这种困惑很大程度上归因于我对即将到来的边缘过渡的理解不足。 欢迎任何想法,反馈或问题。

谢谢。

0 个答案:

没有答案