Мы помещаем все продукты и библиотеки в один монолитный c git репозиторий. Его компоновка выглядит следующим образом:
- FooProduct
- BarProduct
- BazLibrary
- 3rd_party
|- fftw
|- msgpack
|- zlib
В настоящее время мы используем CMake для управления сборкой. Так как CMake разделил этапы конфигурации, генерации и сборки, выполнение всех этих действий потребовало бы очень много времени. Чтобы избежать этого, мы даем верхний уровень CMakeLists.txt
для каждой части, а также ссылаемся на проекты равноправных участников на вызовах верхнего уровня add_subirectory
. Например:
# FooProduct/CMakeLists.txt
project(FooProduct)
add_subdirectory(../BazLibrary sibling/BazLibrary)
add_subdirectory(../3rd_party/zlib sibling/3rd_party/zlib)
......
Теперь мы оцениваем Bazel , и у меня сразу же возник вопрос: должен ли я разместить только один сингл WORKSPACE
в верхнем каталоге репо git?
- 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