使用Bazel构建系统构建具有循环依赖性的C++代码
Build C++ code with Circular dependency using Bazel Build System
在寻找一个可以处理多种语言并以增量方式构建代码的构建系统时,我发现Bazel是一个非常好的解决方案。然而,有一个问题我没有解决办法。
我有具有循环依赖关系的C++代码。在问题得到解决之前,我需要一个能够构建此类代码的构建系统。我的问题是,Bazel能否构建具有循环依赖关系的代码,尤其是C++代码?如果是,是否有人可以分享指导方针或一些有用的链接?
这取决于循环依赖项的确切外观。
-
两个.cc文件依赖于彼此的.h文件
将.cc和.h文件放在同一个cc_library规则中,或者对.h文件使用仅限标头的规则,并使.cc文件的cc_library's依赖于相应的其他cc_libray。
-
两个.h文件,#相互包含
这两者都需要在同一个cc_library中,Bazel才能处理它
或者,如果你有include保护,那么你可以这样重构:假设文件是a.h和b.h。你可以将b.h重命名为b-impl.h,从b-impl.h中删除a.h的#include,并添加一个新的文件b.h,#includea.h。这将使包含顺序始终一致,并在基本上向后兼容的情况下删除循环(只要它们不都试图声明相同的符号,并且包括它们的代码取决于顺序)。
-
两个.cc文件,#相互包含
错误。。。我希望你不是这样。
-
具有相互符号参考的2.a文件
这通常用--start group a.a b.a-end group来处理,但Bazel中目前还没有这样的机制。看见https://github.com/bazelbuild/bazel/issues/818.
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 使用Bazel构建系统构建具有循环依赖性的C++代码
- 在Raspberry Pi 3:E上建造QT:无法满足Libqt5Gui5的构建依赖性