如何在bazel中同时处理外部依赖项和我的项目
How can work on an external dependency and my project at the same time in bazel?
我的问题是关于子项目以及它们在bazel中的依赖关系。
我正在做一个c++项目。称之为a项目。
项目A取决于我正在进行的另外两个项目,B和C。
项目B也依赖于项目C。
所以它看起来是这样的。
A -> (B, C)
B -> (C)
C -> no external dependencies
我希望能够同时处理这三个项目,但我希望保持它们的独立性。
我已经尝试了几种设置方法:
我的WORKSPACE文件中git的外部依赖项。这里的问题是,当我希望对它们进行更改时,就好像它们是一个更大的项目一样,它们不会保持同步。不断切换目录、推送我的存储库、返回到另一个存储库以及潜在的拉取(如果bazel决定这么做,仍然不知道如何强制(的工作流程也很糟糕。
Git子模块&存储库中的外部依赖关系。这里的问题是在CLion中,或者我用来跳转到引用的任何东西实际上都是从某个特定创建的bazel缓存中获得引用的,而不是我想要提交的实际回购。
Git子模块,其中子模块只是我所依赖的包。这将是我最喜欢的解决方案,但如果我这样做,每个子模块中的BUILD文件(都存储在第三方或其他目录中(都是无效的,因为它们本身依赖于外部依赖关系。例如,项目B将C作为外部依赖项包含在我工作的工作空间中,但在这个工作空间中C是一个包。我能想到的管理这种情况的唯一方法是重写Bazel库以这种方式包含的每个包的所有构建文件。这似乎没有成效。
我知道在谷歌,我们使用了一个不同的版本,并将其保存在一个内部工作区中,但必须有一个解决方案让bazel做到这一点。
对于类似的用例(在发送提取请求之前测试对第三方依赖关系的更改(,我使用基于--override_repository
的工作流。这告诉Bazel不要从Github提取给定的外部存储库,而是使用本地磁盘上的副本。
例如,在您的情况下,我可能有这样的布局:
ls~/git项目a项目bproject_c
我可以在~/git/project_b
内部进行更改,然后按照如下方式构建项目a:
cd~/git/project_b#编辑文件cd~/git/project_a巴泽尔建筑//--override_repository com_github_username_project_b=$HOME/git/project_b
您也可以在.bazelrc
中添加一行build --override_repository name=/path/to/repo
,但我不愿意这样做,以免提交依赖于未提交的依赖项更改的代码。
因此,我发现的总体解决方案是创建一个monorepo,并使用copybara等工具对每个包进行独立发布。
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 如何将外部依赖引入跨平台CMake项目?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 使用 cmake 获取外部依赖关系
- CMake 外部和内部静态库的循环依赖关系
- 如何在bazel中同时处理外部依赖项和我的项目
- 如果 copts 不允许系统路径,如何引用外部依赖项使用的系统库?
- 使用外部依赖项运行 VC++ 单元测试时"Failed to set up execution context"
- 无法构建外部库依赖项
- 如何忽略来自 Bazel 中的外部C++依赖项标头的警告
- CMake 和外部依赖关系
- 使用 CMake 外部项目为跨平台库依赖项的目标名称
- 是否可以编译具有在编译时无法解析的外部依赖项的静态库?
- C++项目文件夹外部依赖项仅包含 .h 和 .hpp 文件
- 如何避免#crude依赖外部库
- 在Visual Studios 2010的外部依赖项文件夹中搜索文本/代码
- visualstudioc++的外部依赖关系
- 如何在VS2015中将外部库依赖项链接到一个静态库文件中
- 如何测试从依赖于外部系统的外部基类派生的类
- 在命名空间前缀解析和优化级别依赖关系中使用外部"C" C++