Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 单个或多个bazel工作区应用于整体回购?_Cmake_Bazel_Monolithic - Fatal编程技术网

Cmake 单个或多个bazel工作区应用于整体回购?

Cmake 单个或多个bazel工作区应用于整体回购?,cmake,bazel,monolithic,Cmake,Bazel,Monolithic,我们将所有产品和库放在一个单一的git存储库中。其布局如下所示: - FooProduct - BarProduct - BazLibrary - 3rd_party |- fftw |- msgpack |- zlib 目前,我们正在使用CMake来控制构建。由于CMake已将配置、生成和构建阶段分开,所以如果您同时生成所有内容,则需要非常长的时间才能运行。为了避免这种情况,我们为每个部分提供顶级CMakeLists.txt,并通过向上调用add\u子目录引用对等项目。例如: # Fo

我们将所有产品和库放在一个单一的git存储库中。其布局如下所示:

- 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。无论是从完全不同的回购协议中提取,还是放在同一棵树上,都无关紧要。它需要重建,但也需要缓存