SerJook
@SerJook
кодер

Как автоматизировать сборку зависимостей программы?

Я разрабатываю программу на C++. Для сборки программы я использую Visual Studio 2013 (2017) а также CMake (пока не полностью перешел на CMake). Некоторые модули программы кроссплатформенные.
Программа зависит от десятка-другого библиотек. Сейчас я собираю их каждый раз вручную. Для меня это головная боль.
Причем библиотеки собираются по-разному, какие-то с помощью CMake, другие (типа boost) с помощью своей системы сборки, третьи используют Makefile, четвертые вообще поставляются в виде голых исходников. Какие-то требуют вообще msys2 для сборки.

Я думаю, как упростить этот процесс и автоматизировать. Я хочу чтобы человек мог скачать мой проект, запустить команду и зависимости собрались и скопировались в нужную папку. Что посоветуете? Как это решается в других проектах?
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 3
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Смотрите в сторону любого менеджера зависимостей вроде Conan или vcpkg. У конана точно есть интеграция с CMake. Только учтите, что много чего вам всё равно придётся писать руками. Управление зависимостями -- это головная боль в C++, т.к. язык очень старый. Обычно у всех компаний есть свои велосипеды для этого.

С помощью связки CMake + Conan реально получить то, что вы хотите.

Следующим шагом будет создание установщика для уже скомпилированной программы, который будет устанавливать программу на компьютер пользователя. Тут всё ещё хуже на самом деле :) Но это уже другой вопрос.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как это решается в других проектах?

В других проектах (обычно называемых "дистрибутивы ОС") библиотеки и заголовочные файлы помещаются в пакеты и устанавливаются стандартной командой ОС из репозитория. Велика вероятность того, что часть ваших библиотек уже представлена готовыми пакетами.
Другие проекты (иногда называемых "построители дистрибутивов") могут по большей части состоять из рецептов сборки всяческих библиотек. См. например buildroot или yocto.
Ответ написан
Комментировать
@rPman
Возьмите тот же make, мы все привыкли что makefile содержат какой-нибудь автогенирированный эпический код, в котором уже давно никто полноценно не разбирается, но вообще то это неплозая система автоматического контроля версий файлов и сборки с учетом зависимостей.

Когда вы пишите
целевой_файл:используемые файлы
  командная строка для сборки целевого файла
вы фактически описываете процесс, когда make проверяет версии используемых файлов по цепочкам зависимостей автоматически и запускает соответствующие команды.

Для каждой своей зависимости у вас можно написать bat-файл, который переходит в нужный каталог и пересобирает ее, затем копирует результат в каталог вашего проекта. Вы можете для каждого написать по паре строчек в вашем makefile указав в качестве используемых файлов вообще все файлы каждого проекта или лучше какой-нибудь один (например index файл из их git каталога) и все, при любом обновлении у вас будет происходить запуск сборки. Затем вы можете добавить этот makefile в ваш проект (либо вручную прописать его вызов) на сколько я помню в visual studio есть куча возможностей для этого.

Да, бывают проблемы посложнее, когда для сборки очередной версии нужно совершать какие то действия, описанные в обычном текстовом файле для человека, к сожалению универсального решения вы не найдете,.. это и есть та работа, которую выполняют мейнтейнеры любого приложения - следить за этим хозяйством.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы