Официальная документация: https://docs.conan.io/2/index.html
Данная статья носит лишь рекомендательный характер, любые коррекции ошибок другие правки только приветствуются.
Инструмент Conan 2 имеет гибкий функционал, поэтому данная статья раскрывает лишь определенный шаблон работы с ним.
На языке программирования создается программное обеспечение (ПО). Задачи ПО многообразны. При написании сложного ПО человеческих ресурсов не всегда хватает, чтобы держать весь проект в своей голове (некоторой оперативной памяти).
Для этого, как и в любой сложной области, применяют подход с применением абстракции. Чаще всего это означает, что взаимодействовать со сложным компонентом процессом можно и без знаний, как конкретно внутри он устроен, главное четко следовать правилам взаимодействия, заранее написаны. Другими словами - использовать интерфейс взаимодействия.
Чтобы использовать это правило, требуется воспользоваться другим подходом, который имеет название - разделяй и властвуй. Если кратко, то метод предполагает рекурсивное разбиение (декомпозиция) исходной задачи, на подзадачи, с которыми будет легко работать. При этом важно понимать, что декомпозированые компоненты должны иметь слабую связанность между друг т.е. использовать свойства абстракции.
Исходный программный продукт разбивается на модули, которые легко можно использовать в контексте определенного проекта. Если модули по одному функционалу складываются вместе в отдельное множество, то появляется библиотека. Если библиотеки по одному функционалу складываются вместе в отдельное множество, то появляется фреймворк. Важно понимать, что модули и библиотеки используются как подключаемые инструменты, в то время как фреймворк является скорее конструкцией (программным скелетом), в который мы интегрируем свой софт.
Способы выделения библиотеки разнится в зависимости от используемого языка программирования (ЯП). В общем случае библиотека имеет несколько важных пунктов таких как:
- Управление версиями
- Способ подключения
- Зависимости от других библиотек
Данные пункты обозначим как требования к пакетному менеджеру по функционалу (ТПМ).
Чтобы переложить ручной труд контроля данных пунктов, изобрели пакетные менеджеры. Пакетные менеджеры используются в паре с системой сборки. В высокоуровневых системах чаще всего эти функции выполняет одно и то же ПО. Пакетный менеджер собирает все исходники и проверяет валидность полученных исходников вместе и после отдает все в систему сборки, которая в свою очередь превращает программный код в исполняемые программы, используя компиляторы.
Применительно к ЯП C++:
элемент | решения |
---|---|
Пакетный менеджер | ? |
Система сборки | (упорядочено по популярности) CMake, Bazel, GNU Make ,Build2, MsBuild, QMAke |
В роли пакетного менеджера унифицированного инструмента изначально не было, такие сообщества как Boost писали свой инструмент. Можно использовать CMake tools, Ручное копирование исходников, скрипты, которые автоматизируют скачивание исходников, GIT subdirectories.
Но ни один из данных подходов в роли пакетного менеджера не контролирует одновременно все пункты ТПМ.
Из тех пакетных менеджеров, что удовлетворяют поставленным требованиям на текущий момент есть:
Пакетный менеджер | Плюсы | Минусы |
---|---|---|
Conan | - Поддержка множества сборщиков (CMake, Make, MSBuild и др.) - Большое сообщество и множество рецептов - Кросс-платформенность |
- Требует настройки репозиториев - Может быть избыточным для мелких проектов |
vcpkg | - Интеграция с Visual Studio и CMake - Автоматическая настройка зависимостей - Поддержка Windows, Linux, macOS |
- Может быть медленным при установке больших библиотек - Ограниченная поддержка нестандартных конфигураций |
Hunter | - Простая интеграция с CMake - Упрощает добавление сторонних библиотек - Поддержка кроссплатформенности |
- Меньше библиотек по сравнению с Conan и vcpkg - Меньше сообщество |
CPM.cmake | - Минималистичный и легковесный - Простая интеграция с CMake - Не требует дополнительных инструментов |
- Ограниченная функциональность - Подходит только для мелких проектов |
Buckaroo | - Поддержка C++ и других языков - Интеграция с системой сборки Buck |
- Меньше библиотек и сообщества - Ограниченная популярность |
Spack | - Ориентирован на HPC и научные проекты - Поддержка множества платформ и конфигураций |
- Сложность настройки - Не подходит для обычных приложений |
NuGet | - Интеграция с Visual Studio - Поддержка .NET и C++ (Windows) |
- Ограниченная поддержка C++ - Не подходит для кросс-платформенных проектов |
APT/YUM/Homebrew | - Простота использования - Интеграция с системными библиотеками |
- Ограниченная поддержка версий - Зависит от системных репозиториев |
Самым мощным по функционалу является - Conan. Также у него имеется уже накопленный репозиторий с популярными библиотекам. Есть возможность развернуть свой собственный репозиторий для библиотек.
На текущий момент самая последняя версия conan 2.X ? Поэтому любое упоминание слова conan
ассоциировано с версией 2.X .
Установленный пакетный менеджер для python - pip. Python используется в conan как язык конфигурации.
Установленный conan через pip c помощью команды pip install conan
.
- Конфигурирование
- Менеджемент пакетов
- Конфигурационный файл