Cmake 单个或多个bazel工作区应用于整体回购?
我们将所有产品和库放在一个单一的git存储库中。其布局如下所示:Cmake 单个或多个bazel工作区应用于整体回购?,cmake,bazel,monolithic,Cmake,Bazel,Monolithic,我们将所有产品和库放在一个单一的git存储库中。其布局如下所示: - FooProduct - BarProduct - BazLibrary - 3rd_party |- fftw |- msgpack |- zlib 目前,我们正在使用CMake来控制构建。由于CMake已将配置、生成和构建阶段分开,所以如果您同时生成所有内容,则需要非常长的时间才能运行。为了避免这种情况,我们为每个部分提供顶级CMakeLists.txt,并通过向上调用add\u子目录引用对等项目。例如: # Fo
- FooProduct
- BarProduct
- BazLibrary
- 3rd_party
|- fftw
|- msgpack
|- zlib
目前,我们正在使用CMake来控制构建。由于CMake已将配置、生成和构建阶段分开,所以如果您同时生成所有内容,则需要非常长的时间才能运行。为了避免这种情况,我们为每个部分提供顶级CMakeLists.txt
,并通过向上调用add\u子目录
引用对等项目。例如:
# FooProduct/CMakeLists.txt
project(FooProduct)
add_subdirectory(../BazLibrary sibling/BazLibrary)
add_subdirectory(../3rd_party/zlib sibling/3rd_party/zlib)
......
现在我们正在评估Bazel,我马上就遇到了一个问题:我应该只在git回购的顶部目录中放置一个工作区吗
- WORKSPACE
- FooProduct
- BarProduct
- BazLibrary
- 3rd_party
|- fftw
|- msgpack
|- zlib
或者在每个产品/库中放置许多工作区
文件,并使用本地存储库
规则相互引用
- FooProduct
|- WORKSPACE
- BarProduct
|- WORKSPACE
- BazLibrary
|- WORKSPACE
- 3rd_party
|- fftw
|- WORKSPACE
|- msgpack
|- WORKSPACE
|- zlib
|- WORKSPACE
根据定义,单个工作区或源代码/生成树只有一个(顶级)工作区
。理论上,您可以将WORKSPACE
放在树的分支上,但一个明显的混淆源是,当从另一个WORKSPACE
位于cwd
和项目根目录之间的目录运行bazel时,您无法达到项目目标。而你不会真正得到任何回报
如果要在多个目录(甚至子模块)之间分发配置,可以添加Starlark(.bzl
)文件,其中包含宏(“函数”),定义树中任何位置(例如//第三方/…
)的对应存储库规则目标(外部依赖项)并在(项目)工作区
文件中加载并执行相应的定义
但这更像是一个组织问题(例如,不同的人/组维护不同的依赖关系;或者只是保持文件的小型化),有效地工作(最终评估)就像拥有一个大的工作区文件一样
如果外部依赖项被称为源和BUILD
description。无论是从完全不同的回购协议中提取,还是放在同一棵树上,都无关紧要。它需要重建,但也需要缓存