我有兴趣了解 bazel 是否可以处理“两阶段构建”,其中依赖项是根据文件内容发现的,并且依赖项必须在依赖于它们的代码之前编译(与 C/C++ 不同,其中依赖项主要是不是的头文件单独编译)。具体来说,我正在构建类似于 Ocaml 的 Coq 语言。
我对创建构建计划的直觉是使用一个(现有的)工具(称为coqdep
)来读取.v
文件并返回其所有直接依赖项的列表。这是我想到的算法:
coqdep
在目标文件和(传递地)其每个依赖文件上调用,- 一旦计算了目标的传递依赖关系,就添加一个规则来构建
.vo
包含.v
传递依赖关系的规则。
理想情况下,对(在步骤 1 中)的调用coqdep
将在构建之间缓存,因此只需要在文件更改时重新计算。并且依赖信息的传递闭包也将被缓存。
是否可以在 bazel 中实现这一点?有没有为这样的语言设置构建的指针?天真地,它似乎是一个两阶段构建,我不确定这如何适合 bazel 的编译模型。当我查看 Ocaml 的规则时,它似乎依赖于ocamlbuild
满足构建顺序和依赖项要求,而不是在 bazel 中“本地”执行它。
感谢您的任何指示或见解。