{"id":25612195,"url":"https://github.com/dimitrius-dev/conan2-examples","last_synced_at":"2025-02-22T00:17:52.589Z","repository":{"id":278826343,"uuid":"936899075","full_name":"Dimitrius-dev/conan2-examples","owner":"Dimitrius-dev","description":"Project examples based on Conan2","archived":false,"fork":false,"pushed_at":"2025-02-21T22:20:51.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-21T23:41:41.521Z","etag":null,"topics":["build","build-tool","cmake","cmake-toolchain","conan","conan-lib","conan-recipe","conan2","conanfile","cpp","lib","library","packet","packet-manager"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dimitrius-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-21T22:16:39.000Z","updated_at":"2025-02-21T23:12:12.000Z","dependencies_parsed_at":"2025-02-21T23:41:43.138Z","dependency_job_id":"55a4bcac-914e-4765-8449-063da808a3e0","html_url":"https://github.com/Dimitrius-dev/conan2-examples","commit_stats":null,"previous_names":["dimitrius-dev/conan2-examples"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dimitrius-dev%2Fconan2-examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dimitrius-dev%2Fconan2-examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dimitrius-dev%2Fconan2-examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dimitrius-dev%2Fconan2-examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dimitrius-dev","download_url":"https://codeload.github.com/Dimitrius-dev/conan2-examples/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240105465,"owners_count":19748465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","build-tool","cmake","cmake-toolchain","conan","conan-lib","conan-recipe","conan2","conanfile","cpp","lib","library","packet","packet-manager"],"created_at":"2025-02-22T00:17:51.925Z","updated_at":"2025-02-22T00:17:52.576Z","avatar_url":"https://github.com/Dimitrius-dev.png","language":"Python","readme":"\n# Conan 2\n___\nОфициальная документация: https://docs.conan.io/2/index.html\n\nДанная статья носит лишь рекомендательный характер, любые коррекции ошибок другие правки только приветствуются.\n\n### Важно:\nИнструмент Conan 2 имеет **гибкий функционал**, поэтому данная статья **раскрывает лишь определенный шаблон** работы с ним. \n___\n\n## Введение\n\nНа языке программирования создается программное обеспечение (ПО). Задачи ПО многообразны.\nПри написании сложного ПО человеческих ресурсов не всегда хватает, чтобы держать весь проект в своей голове (некоторой оперативной памяти).\n\nДля этого, как и в любой сложной области, применяют подход с применением **абстракции**.\nЧаще всего это означает, что взаимодействовать со сложным компонентом процессом можно и без знаний, как конкретно внутри он устроен, главное четко следовать правилам взаимодействия, заранее написаны.\nДругими словами - использовать **интерфейс** взаимодействия.\n\nЧтобы использовать это правило, требуется воспользоваться другим подходом, который имеет название - **разделяй и властвуй**.\nЕсли кратко, то метод предполагает рекурсивное разбиение (декомпозиция) исходной задачи, на подзадачи, с которыми будет легко работать.\nПри этом важно понимать, что декомпозированые компоненты должны иметь слабую связанность между друг т.е. использовать свойства абстракции.\n  \nИсходный программный продукт разбивается на **модули**, которые легко можно использовать в контексте определенного проекта.\nЕсли модули по одному функционалу складываются вместе в отдельное множество, то появляется **библиотека**.\nЕсли библиотеки по одному функционалу складываются вместе в отдельное множество, то появляется **фреймворк**.\nВажно понимать, что модули и библиотеки используются как подключаемые инструменты, в то время как фреймворк является скорее конструкцией (программным скелетом), в который мы интегрируем свой софт.\n\nСпособы выделения библиотеки разнится в зависимости от используемого языка программирования (ЯП).\nВ общем случае библиотека имеет несколько важных пунктов таких как:\n+ Управление версиями\n+ Способ подключения\n+ Зависимости от других библиотек\n\nДанные пункты обозначим как **требования к пакетному менеджеру** по функционалу (ТПМ). \n\nЧтобы переложить ручной труд контроля данных пунктов, изобрели **пакетные менеджеры**.\nПакетные менеджеры используются в паре с системой сборки. В высокоуровневых системах чаще всего эти функции выполняет одно и то же ПО.\nПакетный менеджер собирает все исходники и проверяет валидность полученных исходников вместе и после отдает все в систему сборки, которая в свою очередь превращает программный код в исполняемые программы, используя компиляторы.\n\nПрименительно к ЯП **C++**:\n\n| элемент           | решения                                                                          |\n|-------------------|----------------------------------------------------------------------------------|\n| Пакетный менеджер | ?                                                                                |\n|Система сборки| (упорядочено по популярности)\u003cbr/\u003e **CMake**, Bazel, GNU Make ,Build2, MsBuild, QMAke |\n\nВ роли пакетного менеджера унифицированного инструмента изначально не было, такие сообщества как Boost писали свой инструмент.\nМожно использовать CMake tools, Ручное копирование исходников, скрипты, которые автоматизируют скачивание исходников, GIT subdirectories.\n\nНо ни один из данных подходов в роли пакетного менеджера не контролирует одновременно все пункты ТПМ.\n\nИз тех пакетных менеджеров, что удовлетворяют поставленным требованиям на текущий момент есть:\n\n\n| Пакетный менеджер | Плюсы                                                                 | Минусы                                                                 |\n|--------------------|-----------------------------------------------------------------------|------------------------------------------------------------------------|\n| **Conan**          | - Поддержка множества сборщиков (CMake, Make, MSBuild и др.)\u003cbr\u003e- Большое сообщество и множество рецептов\u003cbr\u003e- Кросс-платформенность | - Требует настройки репозиториев\u003cbr\u003e- Может быть избыточным для мелких проектов |\n| **vcpkg**          | - Интеграция с Visual Studio и CMake\u003cbr\u003e- Автоматическая настройка зависимостей\u003cbr\u003e- Поддержка Windows, Linux, macOS | - Может быть медленным при установке больших библиотек\u003cbr\u003e- Ограниченная поддержка нестандартных конфигураций |\n| **Hunter**         | - Простая интеграция с CMake\u003cbr\u003e- Упрощает добавление сторонних библиотек\u003cbr\u003e- Поддержка кроссплатформенности | - Меньше библиотек по сравнению с Conan и vcpkg\u003cbr\u003e- Меньше сообщество |\n| **CPM.cmake**      | - Минималистичный и легковесный\u003cbr\u003e- Простая интеграция с CMake\u003cbr\u003e- Не требует дополнительных инструментов | - Ограниченная функциональность\u003cbr\u003e- Подходит только для мелких проектов |\n| **Buckaroo**       | - Поддержка C++ и других языков\u003cbr\u003e- Интеграция с системой сборки Buck | - Меньше библиотек и сообщества\u003cbr\u003e- Ограниченная популярность |\n| **Spack**          | - Ориентирован на HPC и научные проекты\u003cbr\u003e- Поддержка множества платформ и конфигураций | - Сложность настройки\u003cbr\u003e- Не подходит для обычных приложений |\n| **NuGet**          | - Интеграция с Visual Studio\u003cbr\u003e- Поддержка .NET и C++ (Windows) | - Ограниченная поддержка C++\u003cbr\u003e- Не подходит для кросс-платформенных проектов |\n| **APT/YUM/Homebrew** | - Простота использования\u003cbr\u003e- Интеграция с системными библиотеками | - Ограниченная поддержка версий\u003cbr\u003e- Зависит от системных репозиториев |\n\nСамым мощным по функционалу является - Conan. Также у него имеется уже накопленный репозиторий с популярными библиотекам.\nЕсть возможность развернуть свой собственный репозиторий для библиотек.\n\nНа текущий момент самая последняя версия conan 2.X ? Поэтому любое упоминание слова `conan` ассоциировано с версией 2.X . \n\n## Требования к conan\n\nУстановленный пакетный менеджер для **python** - **pip**. Python используется в conan как язык конфигурации.\n\nУстановленный conan через pip c помощью команды `pip install conan`.\n\n___\n## Структура взаимодействия с Conan \n\n+ Конфигурирование\n  + [Введение в настройки](./docs/settings_intro.md)\n  + [Глобальные настройки](./docs/global_cond.md)\n  + [Профиль](./docs/profile.md)\n  + [Параметры команд](./docs/comand_parameter.md)\n+ Менеджемент пакетов\n  + [Система менеджемента пакетов](./docs/package_management.md)\n  + [Обзор существующих пакетов](./docs/management_existed_packages.md)\n+ Конфигурационный файл\n  + [Общая концепция](./docs/conanfile_intro.md)\n  + [Использование пакетов](./executable/executable.md)\n  + [Создание пакетов](./library/library.md)\n  + [Менеджмент созданных пакетов](./docs/developed_package_management.md)\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimitrius-dev%2Fconan2-examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimitrius-dev%2Fconan2-examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimitrius-dev%2Fconan2-examples/lists"}