Примерно на 20-ом просмотре https://t.me/itpgchannel/4280 я решил, что негоже пользоваться гойскими системами сборки, и для #shell ImGui Desktop (анонс, если кто пропустил - https://t.me/itpgchannel/4275) мне нужна хорошая, годная, система сборки.
Надо сказать, что мне очень нравится пилить системы сборки, я за всю жизнь запилил их штук 10, часть inhouse - https://github.com/yandex/yatool, часть лежит на gihub. Тот же #IX - вполне себе система сборки.
Многие пользуются заслуженной популярностью!
В общем, если я за год не запилил систему сборки, то год прошел зря. За этот год я уже запилил две - https://github.com/pg83/ay, и вот теперь https://github.com/pg83/build.
По сути, это комбинация yatool выше (opensource версия нашей inhouse системы сборки ya), и meson.
От meson в ней способ описания сборочных файлов, только сильно проще:
https://github.com/pg83/gofra/blob/master/build.py
https://github.com/pg83/zutty/blob/master/build.py
В отличие от meson, это настоящий python, а не интерпретируемое подмножество, поэтому удобно делать всякие штуки, связанные с внешним окружением - всякого рода glob() по файлам/директориям, полуавтоматическое заведение новых таргетов при разумном устройстве fs, возможность скачать исходник из интернета, и так далее. Вот пример сложного сборочного файла, где это используется в хвост и в гриву - https://github.com/pg83/imway/blob/main/build.py.
К сожалению, это необходимо для сборки небольших oss проектов, поэтому это должно быть удобным.
От ya там, я бы это назвал, "общая вменяемость":
* мгновенное исполнение - раннер прямо встроен в тулзу, тулза строит граф, и тут же его выполняет
* пересборка не по timestamp, а по хешу от файлов и команд
* исходники парсятся, все их включения известны заранее, поэтому пересборка очень fine grained
* так как мы знаем все include для всех файлов, в том числе, от кодогенеренных таргетов, то совершенно не нужно указывать подробные зависимости, они будут выведены автоматически
* cas как хранилище артефактов
* норм кросс-компиляция
На КДПВ - результат сборки небольшого проекта. Половина моих читателей видела похожий output 100500 раз, я не люблю перепридумывать хорошие вещи.
Вся сборка - это один небольшой файл build, который копируется прямо в проект, как waf, поэтому сборка проекта самодостаточна.
Перевел на эту сборку весь свой C++ код, в том числе, #zutty, #shell, и доволен, как слон.
Я бы взял ya, но она не очень хорошо приспособлена для сборки небольших проектов, и очень для этого тяжеловесна.
#build
Post #4282
2.5K

- 💊 32
- ❤ 14
- 🔥 9
- 🤡 6
- 👍 2
- 🤔 1