Как внести внешние зависимости в кроссплатформенный проект CMake? - PullRequest
1 голос
/ 11 января 2020

Каков наилучший подход для привлечения внешних зависимостей в кроссплатформенный проект 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].

Ссылки

1 Ответ

1 голос
/ 12 января 2020

Ваш Po C может работать, но в CMake есть встроенное решение для извлечения внешних проектов на этапе настройки. Если это не удовлетворяет вашим требованиям, таким как зависимости, не основанные на CMake, вы можете взглянуть на Conan .

https://blog.conan.io/2018/06/11/Transparent-CMake-Integration.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...