Skip to content

Instantly share code, notes, and snippets.

@rkravchik
Created December 22, 2016 13:30
Show Gist options
  • Save rkravchik/8c9938febf24240a99d1ed26f5e4d4ca to your computer and use it in GitHub Desktop.
Save rkravchik/8c9938febf24240a99d1ed26f5e4d4ca to your computer and use it in GitHub Desktop.
Golang alternatives to makefiles.

Go build tasks utilities

Инструментов мало. Тема сообществом мало проработана. Возможно, makefile всех устраивает.

Первая группа: замена утилиты make:

  • makex понимает уже существующие makefiles.

Вторая группа: разнородные инструменты:

  • goxc в своё время популярный сборщик для кроссплатформенной разработки. С выходом go 1.6 его популярность спала. Но в этом комбайне есть хороший модуль тасков. Плюс, другие модули, например, автоматическое версионирование. Использует в качестве конфига JSON файл (как gulp, например).
  • robo для описания тасков использует YAML конфиг. Даже живой.
  • gofer уже более интересный вариант. Но запутанный синтаксис создания задач.

Третья группа: идиоматичные инструменты, похожие на тесты

Самый интересный вариант. Идея хорошая.

Смысл такой. По принципу создания тестов, создаются файлы *_task.go

Можно все задачи в один файл, можно разбивать на разные и раскладывать по папкам проекта. Чтобы файлы не компилировались со всем проектом, вставляется директива компилятора go build (по принципу разделения файлов по платформам):

// +build gotask

Сами задачи описываются в виде:

func TaskXxx(t *tasking.T) {
  ...
}

Поддерживается передача параметров командной строки внутрь задачи и описание usage и т.д. Для детального описания можно ознакомиться с этой короткой статьёй.

Нашёл несколько пакетов, которые её реализуют:

  • непосредственно сам gotask
  • и его единственный близнец - gake

Вывод

Каждая группа хороша для своих задач. Если нравится makefiles, но самого make нет (на винде), можно использовать makex.

Если привыкли к gulp, то - GOXC. Очень схожая идеалогия. Robo тоже неплох, но лично мне YAML синтаксис нравится меньше JSON. Эти два пакета удобны, если в качестве тасков нужно запускать утилиты коммандной строки.

Самый идиоматичный путь, считаю go-task. Единственный минус в том, что даже вызов утилит коммандной строки нужно будет писать на Go (cmd.exec и прочее). В качестве плюса большая гибкость.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment