![Page 1: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/1.jpg)
Менеджер зависимостей для С++
Руслан Муллахметов
![Page 2: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/2.jpg)
Проблемы С++
Как превратить кучу кода в исполняемый файл?
![Page 3: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/3.jpg)
Системы Сборки
Организуют процесс сборки
Связывают воедино промежуточные артефакты
Осуществляют локальный поиск зависимостей
![Page 4: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/4.jpg)
Системы сборки
shell files
make
autotools
scons
cmake
biicode (?)
![Page 5: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/5.jpg)
Процесс сборки в высшей степени
зависит от окружения
разработчика в момент сборки
![Page 6: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/6.jpg)
Проблемы систем сборки
Лишь проверяют, что сборка возможна
check for XYZ …. ok
Нет гарантий на предсказуемость сборки
/usr/local/include
etc
![Page 7: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/7.jpg)
Транзитивные зависимости
A B C
???
![Page 8: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/8.jpg)
Менеджер зависимостей
![Page 9: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/9.jpg)
Реазлизации
biicode (закрылся)
clibs (включает код в source tree)
что-то еще?
![Page 10: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/10.jpg)
Неудача biicode
собственное хранилище исходного кода (дублирование VCS)
Отсутствие предсобранных пакетов
Единый репозиторий - отсутствие децентрализации
![Page 11: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/11.jpg)
Два подхода
Универсальное решение для полного цикла сборки (интрузивный)
Только разрешение и доставка зависимостей (неинтрузивный)
![Page 12: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/12.jpg)
ТребованияПодготовка окружения к сборке
Независимость от системы сборки
Активное использование VCS
Децентрализованная архитектура по модели git
Возможность использования предсобранных пакетов для ускорения времени сборки
контроль конфигурациями зависимостей
![Page 13: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/13.jpg)
cdist
прототип
использует git для хранения репозитория пакетов
разрешает транзитивные зависимости
не поддерживает опции и сборку между репозиториями
хранит описание пакета в yaml формате
![Page 14: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/14.jpg)
libfooexample.com/foo/foo.git <local-dir>/foo/cdist.yaml
. ├── Makefile ├── include │ └── foo.h └── src └── foo.cpp
id: foo version: 0.0.1 source: git://example.com/foo/foo.git build: - make - "make install DESTDIR={{DESTDIR}} PREFIX=" export: include_dir: "{{DESTDIR}}/include" library_dir: "{{DESTDIR}}/lib" library: foo
<local-dir>/foo/ myregistry.com/registry.git
$ cdist add .
. ├── foo │ └── 0.0.1.yaml └── readme.md
1 2
3 4
![Page 15: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/15.jpg)
bar<project-dir> <project-dir>/cdist.yaml
. ├── Makefile ├── include │ └── foo.h └── src └── foo.cpp
id: bar version: 0.0.1 source: . deps: - [email protected] build: - mkdir -p build - "cd build && cmake .. '-DCMAKE_SYSTEM_INCLUDE_PATH={{#INCLUDE_DIRS}}{{x}};{{/INCLUDE_DIRS}}' '-DCMAKE_SYSTEM_LIBRARY_PATH={{#LIB_DIRS}}{{x}};{{/LIB_DIRS}}'"
- "cd build && make"
<project-dir> ~/.cdist/index - clone/pull
$ cdist build .
. ├── foo │ └── 0.0.1.yaml └── readme.md
1 2
3 4
![Page 16: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/16.jpg)
bar (2)
5
6
~/.cdist/cache
$ git clone git://example.com/foo/foo.git foo/0.0.1/src $ cd foo/0.0.1/src $ make $ make install DESTDIR=~./cdist/cache/foo/0.0.1/dest PREFIX=
~/cdist/cache/foo/0.0.1/dest
. ├── include │ └── foo.h └── lib └── libfoo.a
<project-dir>
$ mkdir -p build $ cd build && cmake .. -DCMAKE_SYSTEM_INCLUDE_PATH=~/.cdist/foo/0.0.1/dest/include/’ -DCMAKE_SYSTEM_LIBRARY_PATH=~/.cdist/foo/0.0.1/dest/lib/ 7
![Page 17: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/17.jpg)
Устройство
Пакет A
СборкаАртефакты
mv $dir/
Артефакты +
переменные
Сборка -I$INCLUDE_DIR
Пакет B
![Page 18: Руслан Муллахметов, Открытый и неинтрузивный менеджер зависимостей для С++](https://reader034.vdocuments.mx/reader034/viewer/2022051404/586fb21c1a28abe57d8b6779/html5/thumbnails/18.jpg)
Открытые вопросы
Наследование флагов и дефайнов от зависимостей с правильным порядком
Использование нескольких версий одной и той же библиотеки
Использование статических и динамических библиотек
Опции для сборок и проблемы возникающие при этом
Релейные и дебажные версии: как определять, как зависеть
C++11 etc
Тесты