SlideShare a Scribd company logo
1 of 32
Download to read offline
Hunting for a C++
Packet Manager
Пакетные менеджеры уровня ОС
● FreeBSD Ports Collection;
● Advanced Packaging Tool;
● Debian package;
● Portage;
● Steam;
● Chocolatey;
● Homebrew;
● Apple Store;
● Google Play.
2
Пакетные менеджеры уровня ЯП
Java: Maven, Gradle, Maven Ant Tasks (retired).
Python: Pip.
Ruby: RubyGems.
JavaScript: Npm.
PHP: Composer.
3
RubyGems - для командной строки
~ gem list --local
*** LOCAL GEMS ***
bigdecimal (1.2.0)
json (1.7.7)
rake (0.9.6)
sqlite3 (1.3.7)
4
~ gem search xml
*** REMOTE GEMS ***
aastra_xml_api (1.1.4)
active_xml (0.0.4)
….
~ sudo gem install yaxml
Fetching: yaxml-0.1.gem (100%)
Successfully installed yaxml-0.1
...
1 gem installed
Bundler, GemFile - файл для проекта
source 'https://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.0.beta3'
gem 'rack', '>=1.0'
gem 'thin', '~>1.1'
5
Maven как файл проекта
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Example</name>
<dependencies>
<dependency>
<artifactId>junit</artifactId>
<version>4.8.2</version>
</dependency>
</dependencies>
</project>
6
Как это работает для Maven
/folder/with/maven/xml/file ~ mvn package -Dmaven.test.skip=true
Или по другому:
/folder/with/maven/xml/file ~ mvn eclipse:eclipse
Между делом для windows, maven чаще всего выглядит как инородная
программа на которую надо показать в PATH.
7
Мир C++ хорошо описывается
следующим постом на Reddit
Is there a C++ package manager? If not, how do you handle dependencies?
8
Мир C++ хорошо описывается
следующим постом на Reddit
Is there a C++ package manager? If not, how do you handle dependencies?
- Welcome to the big leagues, where there are approximately 74 different build systems and a patchwork framework of 28
various package managers, most of which only support a certain platform/environment and are useless outside of it.
9
Мир C++ хорошо описывается
следующим постом на Reddit
Is there a C++ package manager? If not, how do you handle dependencies?
- Welcome to the big leagues, where there are approximately 74 different build systems and a patchwork framework of 28
various package managers, most of which only support a certain platform/environment and are useless outside of it.
- HA HA HA HA
- HA Ha ha
ha
ha
Pleasehelp
10
Пакетных менеджеров в C++
достаточно много
Nuget
11
Biicode
Cget
Hunter
CPM
Qpm
Cppget
Pacm
Gradle For C++
Vcpkg
Conan
Чего хотелось бы от пакетного
менеджера?
● Кросс-платформенность;
● Много пакетов, много хороших нужных пакетов (boost / json / xml / curl /
opencv, openssl, zlib … );
● Минимально возможный набор зависимостей;
● Простое использование, документация;
● Находящийся в разработке, а не в стадии архива или в стадии “ничего
пока нет”;
● Быстродействие.
12
Проблемы с кроссплатформенностью и
недостаточным набором пакетов
Nuget is the package manager for the Microsoft development platform including
.NET.
Vcpkg helps you get C and C++ libraries on Windows.
Qml is a package manager for Qt.
Pacm has tiny amount of ready to use packets.
Cget seems to be only boost installer for a long time.
Cppget has 13 packages. 13
Кладбище
Biicode: “Sad to announce that we will be closing doors by 16th Feb, administrators
have dictated servers shutdown.” (c)
14
Кто же остался?
CPM - A C++ Package Manager based on CMake and Git.
Conan - can be installed in many Operating Systems. It is extensively used and
tested in Windows, Linux (different distros), OSX, and also actively used in FreeBSD
and Solaris SunOS, but it has been reported to work in other systems too.
Hunter - Cross-platform package manager for C++ (based on CMake
ExternalProject). Supported platforms: Linux, Mac, Windows, iOS, Android, Raspberry
Pi.
15
CPM - C++ Package Manager
+ Выглядит как менеджер с наибольшим количеством пакетов;
+ Есть веб-сайт где можно найти пакеты, оставить отзывы о пакетах;
+ У самого популярного пакета Caffe 12880 stars, 1598 subscribers;
+ Последний раз пакет был добавлен 23 марта 2017 года;
+ Методика установки выглядит как скрипт в 20 строк который надо
добавить в CMake - это очень удобно для CMake проектов;
- Количество поддерживаемых “операционных систем”;
- Требование предустановленного GIT;
- Некоторые пакеты могут быть староваты. 16
CPM + Boost, что на входе
include(${CPM_DIR}/CPM.cmake)
CPM_AddModule("Boost"
GIT_REPOSITORY "https://github.com/cogumbreiro/cpm-boost"
GIT_TAG "1.59.0")
CPM_Finish()
...
target_link_libraries(${EXE_NAME} ${CPM_LIBRARIES})
17
CPM + Boost, что на выходе
Запуск #1 cmake ./ 91.58s user 54.61s system 11% cpu 20:46.22 total
Запуск #2+ cmake ./ 3.25s user 5.14s system 35% cpu 23.625 total
Размер 1.3 GB.
Header-Only Boost
18
CPM Конструкция
<projdir> /cpm-bin
/cpm_packages/.git
/modules/github_cogumbreiro_cpmboost_1590
/src/.git
/boost/.git
/libs/asio/.git
/system/.git
/tuple/.git
/graph/.git
19
Conan is a portable package manager
+ Код добавляется часто, проект скорее жив чем мертв;
+ Кроссплатформенность / 2 ;
+ Возможность настройки проекта через conanfile.txt;
+ Возможность установки из консоли с помощью conan приложения;
+ Можно создать свой Conan сервер с необходимыми для установки
файлами;
- Требуется Python (хотя в “тестовом” режиме достаточно brew / CMake);
20
Conan + Boost, что на входе
>> cat conanfile.txt
[requires]
Boost/1.63.0@eliaskousk/stable
[generators]
Cmake
>> cat CMakeLists.txt
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(mymain main.cpp)
target_link_libraries(mymain ${CONAN_LIBS})
21
Conan + Boost, что на выходе
Запуск #1 conan install . 5.17s user 3.99s system 24% cpu 37.810 total
Запуск #2+ conan install . 0.42s user 0.23s system 80% cpu 0.801 total
Размер 152 MB.
Запускать пришлось так:
DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:~/.conan/data/Boost/1.63.0/eliaskousk/stabl
e/package/799fada071d3f31a4af934c4bb02dc71da78a99b/lib/ ./bin/mymain
22
Conan + OpenSSL, что на входе
>> cat conanfile.txt
[requires]
OpenSSL/1.0.2g@lasote/stable
[generators]
Cmake
>> cat CMakeLists.txt
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(mymain main.cpp)
target_link_libraries(mymain ${CONAN_LIBS})
23
Conan + OpenSSL, что на выходе
Запуск #1 conan install 70.27s user 17.62s system 85% cpu 1:42.98 total
Запуск #2+ conan install . 0.42s user 0.23s system 80% cpu 0.801 total
Размер 264 MB. Скомпилированные на лету библиотеки.
(Boost лежит там же и занимает 152 MB).
На самом деле пришлось вызвать conan install . --build OpenSSL
24
Conan Конструкция
<projdir>/conanbuild.info - conan CMake пути к библиотекам и CMake макросы;
/conaninfo.txt - настр. проекта (опции библ., архитектура, компилятор).
~/.conan/conan.conf
/settings.yml
/data/OpenSSL/1.0.2g/lasote/stable
/data/Boost/1.63.0/eliaskousk/stable
/export/FindBoost.cmake
/package/799.someid.99b/FindBoost.cmake
/conaninfo.txt
/include/boost/*/*.hpp
/lib/libboost_*.dylib
25
Hunter - CMake-driven
cross-platform package manager for
C++
+ Платформы: Linux, Mac, Windows, iOS, Android, Raspberry Pi;
+ Мультиверсионность на одной машине для разных проектов;
+ По идеологии компилирует библиотеки на месте при возможности;
+ Есть список поддерживаемых пакетов;
- Чтобы использовать надо подсунуть CMake файл (можно добавить
submodule в git);
26
Hunter + Boost, что на входе
27
>> cat CMakeLists.txt
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
include("HunterGate.cmake")
HunterGate(
URL "https://github.com/ruslo/hunter/archive/v0.16.15.tar.gz"
SHA1 "6974c2150fc0d3b09de3ad1efcbf15d360647ffa"
)
hunter_add_package(Boost COMPONENTS system filesystem)
find_package(Boost CONFIG REQUIRED system filesystem)
add_executable(mymain main.cpp)
target_link_libraries(mymain PUBLIC Boost::system Boost::filesystem)
Hunter + Boost, что на выходе
Запуск #1 cmake ./ 167.38s user 60.10s system 38% cpu 9:54.94 total
Запуск #2+ cmake ./ 1.11s user 0.62s system 79% cpu 2.186 total
Размер 202 MB (скомпилированные библиотеки Boost “на лету”) / вместе с исходным кодом
Boost.
+ thread, chrono, date_time, regex, atomic, program_options, test, log.
Запуск #1 cmake ./ 1501.32s user 240.93s system 158% cpu 18:18.56 total
Запуск #2+ cmake ./ 1.76s user 1.43s system 81% cpu 3.921 total
Размер 417 MB (скомпилированные библиотеки Boost “на лету”) / вместе с исходным кодом
Boost. 28
Hunter + OpenSSL, что на входе
29
>> cat CMakeLists.txt
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
include("HunterGate.cmake")
HunterGate(
URL "https://github.com/ruslo/hunter/archive/v0.16.15.tar.gz"
SHA1 "6974c2150fc0d3b09de3ad1efcbf15d360647ffa"
)
hunter_add_package(OpenSSL)
find_package(OpenSSL REQUIRED)
add_executable(mymain main.cpp)
target_link_libraries(mymain OpenSSL::SSL OpenSSL::Crypto)
Hunter + OpenSSL, что на выходе
Запуск #1 cmake ./ 74.84s user 21.52s system 83% cpu 1:55.82 total
Запуск #2+ cmake ./ 1.07s user 0.66s system 88% cpu 1.951 total
Размер 433 MB (скомпилированные библиотеки OpenSSL “на лету”) / вместе с исходным кодом
OpenSSL.
(Boost лежит там же и занимает 417 MB).
30
Hunter Конструкция
<projdir>/_3rdParty/Hunter/install-root-dir - путь к каталогу библиотекам;
/config-id/config.cmake - версии библ. по умолчанию;
/toolchain/
~/.hunter/_Base/Download/Boost/1.62.0/5fd9743/boost_1_62_0.tar.bz2
/Hunter/0.16.15/69754c21/v.0.16.15.tar.gz
/Unpacked/ …
~/.hunter/_Base/Cache/meta/93b575e/Boost/ ...
~/.hunter/_Base/Cache/meta/93b575e/OpenSSL/ ...
~/.hunter/_Base/6974c21/78315bd/93b575e/
/Build/Boost/ ...
/Install/ - симуляция корневого <ROOT> каталога.
31
Спасибо!
Иван Сидоров
ivan.sidarau@gmail.com
32
Хорошие решения - результат опыта.
Опыт результат плохих решений.(с)

More Related Content

What's hot

Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Yandex
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахAleksander Alekseev
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам AnsibleDenis Honig
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работуcorehard_by
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 

What's hot (20)

Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам Ansible
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работу
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 

Similar to Hunting for a C++ package manager

GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesVictor Login
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"Artjoker
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Ускоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокУскоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокcorehard_by
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1rit2011
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)IT-Доминанта
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019corehard_by
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Nikita Baksalyar
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...DrupalCamp MSK
 
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...Mail.ru Group
 
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...Symfoniacs
 

Similar to Hunting for a C++ package manager (20)

GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
 
Git for you
Git for youGit for you
Git for you
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Ускоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокУскоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборок
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)Разработка декстопных приложений для linux (Владимир Яковлев)
Разработка декстопных приложений для linux (Владимир Яковлев)
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
9-vignetts.pdf
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
Aлексей Медведев, Alpari, «Enterprise-инфраструктура менеджмента PHP-пакетов ...
 
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
Enterprise-инфраструктура менеджмента php-пакетов в рамках компании (Aлексей ...
 

More from corehard_by

C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
 
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...corehard_by
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотниковcorehard_by
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титовcorehard_by
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...corehard_by
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...corehard_by
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филоновcorehard_by
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukićcorehard_by
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakovacorehard_by
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...corehard_by
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019corehard_by
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019corehard_by
 
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠  CoreHard Autumn 2019Статичный SQL в С++14. Евгений Захаров ➠  CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019corehard_by
 

More from corehard_by (20)

C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
 
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
 
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений ОхотниковC++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
 
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр ТитовC++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
 
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
 
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел ФилоновC++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
 
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan ČukićC++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
 
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
 
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019Как помочь и как помешать компилятору. Андрей Олейников ➠  CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
 
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠  CoreHard Autumn 2019Статичный SQL в С++14. Евгений Захаров ➠  CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
 

Hunting for a C++ package manager

  • 1. Hunting for a C++ Packet Manager
  • 2. Пакетные менеджеры уровня ОС ● FreeBSD Ports Collection; ● Advanced Packaging Tool; ● Debian package; ● Portage; ● Steam; ● Chocolatey; ● Homebrew; ● Apple Store; ● Google Play. 2
  • 3. Пакетные менеджеры уровня ЯП Java: Maven, Gradle, Maven Ant Tasks (retired). Python: Pip. Ruby: RubyGems. JavaScript: Npm. PHP: Composer. 3
  • 4. RubyGems - для командной строки ~ gem list --local *** LOCAL GEMS *** bigdecimal (1.2.0) json (1.7.7) rake (0.9.6) sqlite3 (1.3.7) 4 ~ gem search xml *** REMOTE GEMS *** aastra_xml_api (1.1.4) active_xml (0.0.4) …. ~ sudo gem install yaxml Fetching: yaxml-0.1.gem (100%) Successfully installed yaxml-0.1 ... 1 gem installed
  • 5. Bundler, GemFile - файл для проекта source 'https://rubygems.org' gem 'nokogiri' gem 'rails', '3.0.0.beta3' gem 'rack', '>=1.0' gem 'thin', '~>1.1' 5
  • 6. Maven как файл проекта <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Maven Example</name> <dependencies> <dependency> <artifactId>junit</artifactId> <version>4.8.2</version> </dependency> </dependencies> </project> 6
  • 7. Как это работает для Maven /folder/with/maven/xml/file ~ mvn package -Dmaven.test.skip=true Или по другому: /folder/with/maven/xml/file ~ mvn eclipse:eclipse Между делом для windows, maven чаще всего выглядит как инородная программа на которую надо показать в PATH. 7
  • 8. Мир C++ хорошо описывается следующим постом на Reddit Is there a C++ package manager? If not, how do you handle dependencies? 8
  • 9. Мир C++ хорошо описывается следующим постом на Reddit Is there a C++ package manager? If not, how do you handle dependencies? - Welcome to the big leagues, where there are approximately 74 different build systems and a patchwork framework of 28 various package managers, most of which only support a certain platform/environment and are useless outside of it. 9
  • 10. Мир C++ хорошо описывается следующим постом на Reddit Is there a C++ package manager? If not, how do you handle dependencies? - Welcome to the big leagues, where there are approximately 74 different build systems and a patchwork framework of 28 various package managers, most of which only support a certain platform/environment and are useless outside of it. - HA HA HA HA - HA Ha ha ha ha Pleasehelp 10
  • 11. Пакетных менеджеров в C++ достаточно много Nuget 11 Biicode Cget Hunter CPM Qpm Cppget Pacm Gradle For C++ Vcpkg Conan
  • 12. Чего хотелось бы от пакетного менеджера? ● Кросс-платформенность; ● Много пакетов, много хороших нужных пакетов (boost / json / xml / curl / opencv, openssl, zlib … ); ● Минимально возможный набор зависимостей; ● Простое использование, документация; ● Находящийся в разработке, а не в стадии архива или в стадии “ничего пока нет”; ● Быстродействие. 12
  • 13. Проблемы с кроссплатформенностью и недостаточным набором пакетов Nuget is the package manager for the Microsoft development platform including .NET. Vcpkg helps you get C and C++ libraries on Windows. Qml is a package manager for Qt. Pacm has tiny amount of ready to use packets. Cget seems to be only boost installer for a long time. Cppget has 13 packages. 13
  • 14. Кладбище Biicode: “Sad to announce that we will be closing doors by 16th Feb, administrators have dictated servers shutdown.” (c) 14
  • 15. Кто же остался? CPM - A C++ Package Manager based on CMake and Git. Conan - can be installed in many Operating Systems. It is extensively used and tested in Windows, Linux (different distros), OSX, and also actively used in FreeBSD and Solaris SunOS, but it has been reported to work in other systems too. Hunter - Cross-platform package manager for C++ (based on CMake ExternalProject). Supported platforms: Linux, Mac, Windows, iOS, Android, Raspberry Pi. 15
  • 16. CPM - C++ Package Manager + Выглядит как менеджер с наибольшим количеством пакетов; + Есть веб-сайт где можно найти пакеты, оставить отзывы о пакетах; + У самого популярного пакета Caffe 12880 stars, 1598 subscribers; + Последний раз пакет был добавлен 23 марта 2017 года; + Методика установки выглядит как скрипт в 20 строк который надо добавить в CMake - это очень удобно для CMake проектов; - Количество поддерживаемых “операционных систем”; - Требование предустановленного GIT; - Некоторые пакеты могут быть староваты. 16
  • 17. CPM + Boost, что на входе include(${CPM_DIR}/CPM.cmake) CPM_AddModule("Boost" GIT_REPOSITORY "https://github.com/cogumbreiro/cpm-boost" GIT_TAG "1.59.0") CPM_Finish() ... target_link_libraries(${EXE_NAME} ${CPM_LIBRARIES}) 17
  • 18. CPM + Boost, что на выходе Запуск #1 cmake ./ 91.58s user 54.61s system 11% cpu 20:46.22 total Запуск #2+ cmake ./ 3.25s user 5.14s system 35% cpu 23.625 total Размер 1.3 GB. Header-Only Boost 18
  • 20. Conan is a portable package manager + Код добавляется часто, проект скорее жив чем мертв; + Кроссплатформенность / 2 ; + Возможность настройки проекта через conanfile.txt; + Возможность установки из консоли с помощью conan приложения; + Можно создать свой Conan сервер с необходимыми для установки файлами; - Требуется Python (хотя в “тестовом” режиме достаточно brew / CMake); 20
  • 21. Conan + Boost, что на входе >> cat conanfile.txt [requires] Boost/1.63.0@eliaskousk/stable [generators] Cmake >> cat CMakeLists.txt include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() add_executable(mymain main.cpp) target_link_libraries(mymain ${CONAN_LIBS}) 21
  • 22. Conan + Boost, что на выходе Запуск #1 conan install . 5.17s user 3.99s system 24% cpu 37.810 total Запуск #2+ conan install . 0.42s user 0.23s system 80% cpu 0.801 total Размер 152 MB. Запускать пришлось так: DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:~/.conan/data/Boost/1.63.0/eliaskousk/stabl e/package/799fada071d3f31a4af934c4bb02dc71da78a99b/lib/ ./bin/mymain 22
  • 23. Conan + OpenSSL, что на входе >> cat conanfile.txt [requires] OpenSSL/1.0.2g@lasote/stable [generators] Cmake >> cat CMakeLists.txt include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() add_executable(mymain main.cpp) target_link_libraries(mymain ${CONAN_LIBS}) 23
  • 24. Conan + OpenSSL, что на выходе Запуск #1 conan install 70.27s user 17.62s system 85% cpu 1:42.98 total Запуск #2+ conan install . 0.42s user 0.23s system 80% cpu 0.801 total Размер 264 MB. Скомпилированные на лету библиотеки. (Boost лежит там же и занимает 152 MB). На самом деле пришлось вызвать conan install . --build OpenSSL 24
  • 25. Conan Конструкция <projdir>/conanbuild.info - conan CMake пути к библиотекам и CMake макросы; /conaninfo.txt - настр. проекта (опции библ., архитектура, компилятор). ~/.conan/conan.conf /settings.yml /data/OpenSSL/1.0.2g/lasote/stable /data/Boost/1.63.0/eliaskousk/stable /export/FindBoost.cmake /package/799.someid.99b/FindBoost.cmake /conaninfo.txt /include/boost/*/*.hpp /lib/libboost_*.dylib 25
  • 26. Hunter - CMake-driven cross-platform package manager for C++ + Платформы: Linux, Mac, Windows, iOS, Android, Raspberry Pi; + Мультиверсионность на одной машине для разных проектов; + По идеологии компилирует библиотеки на месте при возможности; + Есть список поддерживаемых пакетов; - Чтобы использовать надо подсунуть CMake файл (можно добавить submodule в git); 26
  • 27. Hunter + Boost, что на входе 27 >> cat CMakeLists.txt cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) include("HunterGate.cmake") HunterGate( URL "https://github.com/ruslo/hunter/archive/v0.16.15.tar.gz" SHA1 "6974c2150fc0d3b09de3ad1efcbf15d360647ffa" ) hunter_add_package(Boost COMPONENTS system filesystem) find_package(Boost CONFIG REQUIRED system filesystem) add_executable(mymain main.cpp) target_link_libraries(mymain PUBLIC Boost::system Boost::filesystem)
  • 28. Hunter + Boost, что на выходе Запуск #1 cmake ./ 167.38s user 60.10s system 38% cpu 9:54.94 total Запуск #2+ cmake ./ 1.11s user 0.62s system 79% cpu 2.186 total Размер 202 MB (скомпилированные библиотеки Boost “на лету”) / вместе с исходным кодом Boost. + thread, chrono, date_time, regex, atomic, program_options, test, log. Запуск #1 cmake ./ 1501.32s user 240.93s system 158% cpu 18:18.56 total Запуск #2+ cmake ./ 1.76s user 1.43s system 81% cpu 3.921 total Размер 417 MB (скомпилированные библиотеки Boost “на лету”) / вместе с исходным кодом Boost. 28
  • 29. Hunter + OpenSSL, что на входе 29 >> cat CMakeLists.txt cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) include("HunterGate.cmake") HunterGate( URL "https://github.com/ruslo/hunter/archive/v0.16.15.tar.gz" SHA1 "6974c2150fc0d3b09de3ad1efcbf15d360647ffa" ) hunter_add_package(OpenSSL) find_package(OpenSSL REQUIRED) add_executable(mymain main.cpp) target_link_libraries(mymain OpenSSL::SSL OpenSSL::Crypto)
  • 30. Hunter + OpenSSL, что на выходе Запуск #1 cmake ./ 74.84s user 21.52s system 83% cpu 1:55.82 total Запуск #2+ cmake ./ 1.07s user 0.66s system 88% cpu 1.951 total Размер 433 MB (скомпилированные библиотеки OpenSSL “на лету”) / вместе с исходным кодом OpenSSL. (Boost лежит там же и занимает 417 MB). 30
  • 31. Hunter Конструкция <projdir>/_3rdParty/Hunter/install-root-dir - путь к каталогу библиотекам; /config-id/config.cmake - версии библ. по умолчанию; /toolchain/ ~/.hunter/_Base/Download/Boost/1.62.0/5fd9743/boost_1_62_0.tar.bz2 /Hunter/0.16.15/69754c21/v.0.16.15.tar.gz /Unpacked/ … ~/.hunter/_Base/Cache/meta/93b575e/Boost/ ... ~/.hunter/_Base/Cache/meta/93b575e/OpenSSL/ ... ~/.hunter/_Base/6974c21/78315bd/93b575e/ /Build/Boost/ ... /Install/ - симуляция корневого <ROOT> каталога. 31
  • 32. Спасибо! Иван Сидоров ivan.sidarau@gmail.com 32 Хорошие решения - результат опыта. Опыт результат плохих решений.(с)