То, чего я хочу добиться, - это пошаговая сборка всего проекта с зависимостями (как в Slicer).Как я понимаю, общая практика в сложных проектах CMake заключается в следующем:
1 $ cmake ..
Он будет включать в себя все прямые зависимости, указанные с помощью ExternalProject_add
, но, поскольку они изначально не установлены, существуетне будет <DependencyName>Config.cmake
файлов, поэтому он не сможет правильно настроить основные файлы проекта в данный момент.
2 $ make
Эта сборка будет только строить зависимости. Сборка основных файлов проекта не удастся , потому что CMake не может выполнить findPackage(<DependencyName>)
.
3 $ cmake ..
Поскольку все прямые зависимости установлены, CMake может правильно настроить основные файлы проекта, и ...
4 $ make
... успешно.
В моей организации мне сказали, что именно так работает CMake, и нет никакого способа обойти это, кроме грязных хаков, таких как кеширование <DependencyName>Config.cmake
в основном проекте или полное не использование ExternalProjects.,Но я наткнулся на библиотеку Artichoke для CMake и проект Slicer , который использует ее для создания за один шаг как минимум двух десятков зависимостей, некоторые из которых имеют глубину более одного уровня.
Я до сих пор не до конца понимаю, как работает Артишок - (документация Артишока мне не очень помогает), но, по крайней мере, это вдохновило меня снова взглянуть на проблему.