alchemyst/story/makefile_and_crosscompiling.md

3.9 KiB
Raw Permalink Blame History

Автоматизация сборки и тестирование

Мелочи сжирают кучу времени. Не позволяйте им это делать!

Почему это важно

Про сборку под разные ОС я даже убеждать не буду - аудитория рогаликов мало того что крохотная, так еще и сильно сегментирована по осям. Go почти бесплатно дает вам возможность сборки под все мажорные оси, пользуйтесь этим - и потенциально в разы больше народа ознакомится с вашим творением.

Почему это очень важно

Запуск тестов и сборки руками отнимает вроде бы немного времени. Но это настолько частая операция (вы же собираете новые версии после багфиксов, да?!), что даже жалкие 5 минут после 12 сборок в день превращаются в ЧАС потерянного времени. А время вам никто, никогда, ни при каких обстоятельствах не вернет.

Подготовка

Дальше я буду рассказывать про настройку под Linux, поскольку это моя основаня рабочая ось. Но на самом деле настройка под Windows/MinGW и Мак не так уж и сильно отличаются.

соберите внешние библиотеки под каждую целевую для сборки ось, одной версии, и положите их в репозиторий.

Каждый раз выкачивать скажем BLT от разработчика - ненадежно, менять версию библиотеки на новую и несовместимую вы точно не будете, а готовая версия, уже собранная вас наверняка устраивает по фичам, правда ведь?

Вот и заморозьте версию и оставьте эталон там, где он не потеряется. Можно прям в системе контроля версий (Git).

Потратьте день на изучение вендоринга в Go

Прежде всего речь про go mod. Glide, godep и прочие - официально уже более не поддерживаются. Только не просто пролистайте мануал, а прям создайте пакет с hello world, опубликуйте на гитхабе, попробуйте его в другой проект импортировать, поймите зачем нужны теги и что такое семантическое версионирование.

Если вы профессионально программируете (или планируете это делать) на Go - этот потраченный день вернется вам отсуствием в вашей жизни недель головной боли из-за того, что "сборка внезапно сломалась и не работает".

Как выжить при кросс-компиляции, краткий курс

  • Кросскомпиляция, CGO для Mac и Linux. CGO_ENABLED=1, mingw, локальная видимость библиотек

  • Makefile и нафига он нужен

  • Таргеты: Убираем бардак за собой - distclean, build

  • Автоматическое тестирование, testify. Не ленитесь писать тесты!

  • Деплой/публикация после сборки