我们将所有产品和库放在一个单一的 git 存储库中。它的布局如下所示:
- FooProduct
- BarProduct
- BazLibrary
- 3rd_party
|- fftw
|- msgpack
|- zlib
目前,我们正在使用CMake来控制构建。由于CMake将 config、generate 和 build 阶段分开,如果您将所有内容一起生成,将需要非常长时间才能运行。为避免这种情况,我们为每个部分提供顶层,并通过上层调用CMakeLists.txt
引用对等项目。add_subirectory
例如:
# FooProduct/CMakeLists.txt
project(FooProduct)
add_subdirectory(../BazLibrary sibling/BazLibrary)
add_subdirectory(../3rd_party/zlib sibling/3rd_party/zlib)
......
现在我们正在评估BazelWORKSPACE
,我立即得到了一个问题:我应该只在 git repo 的顶级目录中放置一个吗?
- WORKSPACE
- FooProduct
- BarProduct
- BazLibrary
- 3rd_party
|- fftw
|- msgpack
|- zlib
或者在每个产品/库中放置许多文件并使用规则WORKSPACE
相互引用?local_repository
- FooProduct
|- WORKSPACE
- BarProduct
|- WORKSPACE
- BazLibrary
|- WORKSPACE
- 3rd_party
|- fftw
|- WORKSPACE
|- msgpack
|- WORKSPACE
|- zlib
|- WORKSPACE