alchemyst/story/makefile_and_crosscompiling.md

46 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Автоматизация сборки и тестирование
===
Мелочи сжирают кучу времени. Не позволяйте им это делать!
Почему это важно
---
Про сборку под разные ОС я даже убеждать не буду - аудитория рогаликов мало того что крохотная, так еще и сильно
сегментирована по осям. 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. Не ленитесь писать тесты!
- Деплой/публикация после сборки