Упрощенная структура проекта:
orka_engine
├── orka_engine_preprocessing
│ ├── CMakeLists.txt
│ └── src
│ └── main.cc
├── super_build
│ └── CMakeList.txt
└── lib
└── // external checked out libs
с super_build/CMakeList.txt
перечислением каждой внешней библиотеки и каждого подкаталога в проекте как внешнего проекта с жестко заданным путем к нему.
Прямо сейчас способ построить проект -
mkdir build
cd build
cmake ../super_build
make
и это прекрасно работает.
Проблемы начинаются, когда я пытаюсь докеризировать этот проект. cmake для super_build отказывается работать без исходного кода, и это приводит к перекомпиляции внешних библиотек при каждом обновлении исходного кода.
Соответствующие строки из Dockerfile
COPY ./orka_engine ./orka_engine
RUN mkdir ${BUILD_DIR} && \
cd ${BUILD_DIR} && \
cmake ../orka_engine/${CMAKE_TARGET} && \
make -j 5
Я бы хотел собрать внешние библиотеки перед копированием в исходный код проекта, чтобы сократить время сборки докера после первого.
Я достаточно открыт, как этого добиться.