Ami*_*ain 3 c++ circular-dependency build-system bazel
在我寻找一个可以处理多种语言并以增量方式构建代码的构建系统时,我发现 Bazel 是一个非常好的解决方案。然而,有一个问题我没有解决方案。
我有带有循环依赖关系的 C++ 代码。在问题解决之前,我需要一个可以构建此类代码的构建系统。我的问题是,Bazel 可以构建具有循环依赖的代码,尤其是 C++ 代码吗?如果是,有人可以分享指南或一些有用的链接吗?
这取决于你的循环依赖到底是什么样子。
两个 .cc 文件相互依赖于彼此的 .h 文件
将 .cc 和 .h 文件放入同一 cc_library 规则中,或者对 .h 文件使用仅标头规则,并使 .cc 文件的 cc_library 依赖于相应的其他 cc_library。
#include 彼此的两个 .h 文件
这些都需要位于同一个 cc_library 中,Bazel 才能处理它。
或者,如果您有包含防护,那么您可以像这样重构: 假设文件是 ah 和 bh 您可以将 bh 重命名为 b-impl.h,从 b-impl.h 中删除 #include for ah,然后添加一个 #includes ah 的新文件 bh 这将使包含顺序始终一致,并删除循环,同时基本上向后兼容(只要它们不都尝试声明相同的符号并且包含它们的代码依赖于命令)。
#include 彼此的两个 .cc 文件
呃...我希望这不是你的情况。
具有相互符号引用的两个 .a 文件
这通常用 --start-group aa ba --end-group 处理,但 Bazel 目前没有相应的机制。请参阅https://github.com/bazelbuild/bazel/issues/818。