Здравствуйте, хотел бы посоветоваться по поводу структуры проекта на cmake, как сделать правильно и красиво.
На данные момент есть 4 репозитория:
1) libProject - библиотека под GPL в открытом доступе. Есть example app и тесты. Коммиты сюда крайне редки, если не считать синхронизации из mainProject.
2) mainProject - программа, которая зависит от libProject в привате. Никаких сабмодулей, чтобы не усложнять жизнь другим программистам. Периодически вручную синхронизируется с libProject тупым копированием содержимого.
3) subprojectA - часть mainProject в привате, зависит от libProject, libproject подтягивается сабмодулем. В сабмодуль было решено вынести после того, как девелоперы лезли в libProject и ломали mainProject. Если девелоперу нужно внести изменения в libProject, то он должен создать отдельный пулл реквест в libProject, но такая необходимость возникает крайне редко.
4) subprojectB - то же, что и subprojectA, просто другая часть mainProject
Корень subprojectA/B выглядит так:
- CMakeLists.txt
- libProject (submodule dir)
- subprojectA (dir)
В mainProject и назад синхронизация из подпроектов идет опять же в ручном режиме. Как правило над subprojectA и subprojectB в основной программе никто не работает.
Корень mainProject условно выглядит так:
- CMakeLists.txt
- libProject (dir)
- libs (3rdparty libraries dir)
- subprojectA (dir)
- subprojectB (dir)
- src
- resources
Вопрос такой - как внести subprojectA и subprojectB в основной проект избежав дублирования libProject?
По поводу ручной синхронизации - я раньше пробовал делать это через subtree, но видимо не до конца разобрался и при очередном мердже он мне вывалил миллион конфликтов. Можно ли как-то вернуться к subtree структуре без коммита удаления подпроекта и добавления назад?