Каков наилучший подход для привлечения внешних зависимостей в кроссплатформенный проект CMake? См. Ниже объем проблемы и решения, которые я вижу.
Область задачи
Допустим, у нас есть проект C / C ++ со следующими ограничениями:
- CMake - это сборка system;
- Должен быть построен для разных платформ (Desktops, Android NDK / Yocto SDK, iOS);
- Имеет внешние зависимости, созданные с помощью CMake (например, Google Test);
- Имеет внешние зависимости, не основанные на CMake (например, объединение SQLite, Boost);
- Не все зависимости имеют Git восходящий поток (например, SQLite хранится в ископаемом виде).
Приятно иметь вещи:
- Зависимости загружаются автоматически, так что у новых разработчиков меньше шагов для начала кодирования;
- Зависимости настраиваются так, как в IDE ( как CLion) может выполнять автозаполнение (без дополнительных шагов настройки).
Возможные решения
- Git Подмодули (не ясно, что делать с не -Создавать и не хранить в Git зависимостях);
- Инструмент Google Repo (те же проблемы, что и в предыдущем);
- CMake ExternalProject (загрузка, распаковка и возможное исправление с помощью CMakeLists.txt на этапе генерации и включение в проект с помощью add_subdirectory). Я создал PoC [1] на основе ответа Крейга Скотта [2] в [3].
Ссылки