使用Bazel Build System构建具有循环依赖性的C ++代码

时间:2017-07-24 16:08:54

标签: c++ circular-dependency bazel build-system

在寻找可以处理多种语言并以增量方式构建代码的构建系统时,我发现Bazel是一个非常好的解决方案。但是,有一个问题我没有解决方案。

我有循环依赖的C ++代码。在解决之前,我需要一个可以构建此类代码的构建系统。我的问题是,Bazel可以构建具有循环依赖关系的代码,尤其是C ++代码吗?如果是,有人可以分享指南或一些有用的链接吗?

1 个答案:

答案 0 :(得分:3)

这取决于你的循环依赖的确切程度。

  1. 两个.cc文件依赖于彼此的.h文件

    将.cc和.h文件放入相同的cc_library规则中,或者对.h文件使用仅标头规则,并使.cc文件的cc_library依赖于相应的其他cc_library。

    < / LI>
  2. #include彼此的两个.h文件

    这些都需要在Bazel的同一个cc_library中才能处理它。

    或者,如果你有包含警卫,那么你可以像这样重构:假设文件是​​a.h和b.h.你将b.h重命名为b-impl.h,从b-impl.h中删除a.h的#include,并添加一个#includes a.h的新文件b.h.这将使包含顺序始终保持一致,并且在大部分向后兼容的情况下删除循环(只要它们不同时尝试声明相同的符号并且包含它们的代码取决于顺序)。

  3. 两个#include彼此的.cc文件

    呃......我希望那不是你的情况。

  4. 两个带有相互符号引用的.a文件

    这通常用--start-group a.a b.a --end-group来处理,但是现在Bazel没有机制。请参阅https://github.com/bazelbuild/bazel/issues/818