Какие существуют системы для автоматизации процессов сборки?

Какую правильную формулировку темы выбрать для описания процесса создания пакетов (deb, rpm) после сборки бинарников проекта на C++ с использованием CMake? <br/> <br/> В процессе работы мне нужно создать пакеты, копировать в них бинарники и документацию, а также выполнять другие задачи. В настоящее время я использую bash-скрипты, однако учитывая различные нюансы для каждой ОС, у меня возникают проблемы с поддержкой множества скриптов, которые содержат много повторяющихся команд. В итоге мне необходимо, чтобы проект считался "собранным" после завершения этих шагов, чтобы Jenkins мог забрать готовые артефакты. <br/> <br/> Я чувствую, что достиг предела с этим "зоопарком" скриптов для разных операционных систем, и мне нужна кроссплатформенность и универсальность синтаксиса, даже если это означает меньше возможностей по сравнению с текущими скриптами. Может быть, я просто устал, но можете подсказать, какие альтернативы существуют, кроме написания скриптов на Python и тому подобное?
  • 27 сентября 2024 г. 19:43
Ответы на вопрос 2
Существует множество систем для автоматизации процессов сборки, которые могут помочь упростить ваши текущие процессы. Некоторые из них включают:

1. **CMake** — уже используется вами, и можно рассмотреть возможность интеграции с CPack для автоматической генерации пакетов (deb, rpm и др.) после сборки проекта.

2. **Meson** — система сборки, которая также поддерживает создание пакетов и имеет приятный синтаксис. Meson может выполнять сборку в кроссплатформенной среде и автоматически генерировать установочные файлы.

3. **Bazaar/Bazel** — системы, ориентированные на поддержку многоуровневых проектов и автоматизацию процессов сборки.

4. **Gradle** — в основном используется для Java-проектов, но может быть адаптирован для других языков и имеет мощную систему плагинов.

5. **Ninja** — небольшой и быстрый инструмент для автоматизации сборки, часто используется в паре с CMake.

6. **Conan** — менеджер пакетов для C/C++, который поддерживает управление зависимостями и может упрощать процесс сборки и упаковки.

Что касается формулировки темы для описания процесса создания пакетов, рассмотрите следующие варианты:

1. **"Автоматизация создания пакетов deb и rpm для C++ проектов с использованием CMake и CPack"**
2. **"Кроссплатформенная автоматизация сборки и упаковки C++ приложений с помощью CMake"**
3. **"Процесс сборки и упаковки бинарников C++ в деб и рпм пакеты"**
4. **"Создание и управление пакетами для C++ приложений: от CMake до Jenkins"**
5. **"Оптимизация процесса создания дистрибутивов для C++ приложений с использованием CMake и CPack"**

Если вы хотите избегать большого количества bash-скриптов, то рассмотрите использование более синтаксически удобных инструментов, таких как **Gradle** или **Meson**, которые могут предложить более единый подход к вашей задаче. Также стоит исследовать возможности **CMake** и его расширений, так как они могут предоставить нужную функциональность без необходимости создавать множество различных скриптов.
Это очень хорошо что тебя корежить начало от зоопарка скриптов. 

Систем управления задачами довольно много. Они есть на разных языках. Те же MSBuild, cmake, Gradle, Phing, Ant, Zig и.т.д. являются подмножеством множества систем управления задачами. Поэтому нередко люди берут тотже cmake для решения описанных у тебя в вопросе задач. cmake под все из перечисленных у тебя задач не подходит, но люди обычно плачут, колются и продолжают сидеть на кактусе.

Между тем, есть целый класс конкретно систем управления задачами. Такие системы предоставляют только инструменты менеджмента, но не дают никакого начального набора задач, в отличие от того же cmake/Gradle/...
К таким системам менеджмента задач сразу и легко можно отнести Doit , Schedule и их аналоги .

Я работаю с Doit уже больше 10 лет, периодически помогаю его развивать и всячески содействую его разработке.
Для меня Doit стал решением всех описанных у тебя задач и является решением огромного числа неописанных у тебя задач автоматизации и сопровождения процесса разработки проектов.
Doit работает быстро, эффективно, умеет пропускать задачи по условиям инкрементальности, имеет очень гибкую систему настройки поведения и, что главное, от начала и до конца весь написан на Python - одном единственном языке. Он легко интегрируется в Jenkins и позволяет полностью автоматизировать подавляющую часть задач поддержки разработки. Эта система управления задачами является самой гибкой и успешно приспосабливается к самым разным задачам автоматизации ручного труда.
Похожие вопросы