Как стать автором
Обновить

Комментарии 4

Не совсем понимаю, почему вы решили использовать именно make. То, что вы написали — это фактически шелл-скрипт, который не использует ничего из того, для чего make создавался: отслеживание графа зависимостей, построение промежуточных таргетов и т. п.
Кроме того, вы используете расширения GNU make, т.е. на системах, где установлен другой вариант утилиты, вылезут ошибки.
Еще вы не учитываете, что зависимости могут выполняться одновременно, если make запустить с ключом -j. В результате 'make -j 2 restart-server' может привести к странным результатам (а еще у вас start-server — это на самом деле restart, т.к. сервер предварительно тушится).

Теперь о мелочах.
Цели для make называются не как душе угодно. Есть стандарт де-факто, используемый в юниксах:
'make' без аргументов исполняет цель по умолчанию (обычно это all). У вас — почему-то выводит помощь.
'make all' собирает всё (обычно это все бинари и нужные им библиотеки). У вас она тоже выводит помощь.
'make install' устанавливает собранные бинари в системе (предварительно может их собрать, если нужно). Понятно, что сия команда должна исполняться из-под рута и в общем — небезопасна. У вас же на нее повешено совершенно другое действие. Я бы ее обозвал make prepare, например.
Единственное, что более-менее получилось интуитивно-понятным — это make clean.

У меня вот так, используется protobuf, который надо компилить и еще нужно константы снаружи прокидывать в GO код:


NAME=ixshot
IMPORTBASE=gitlab.com/ixshot/ixshot
SYSCONFIGDIR=/etc/${NAME}
DATADIR=/usr/share/${NAME}
LDFLAGS=-ldflags "-X ${IMPORTBASE}/pkg/consts.SysConfigDir=${SYSCONFIGDIR} -X ${IMPORTBASE}/pkg/consts.SysDataDir=${DATADIR}"

all: ixshot-controller.x ixshot-processor.x

ixshot-controller.x: pkg/messages/lightroomtask.pb.go
        go build ${LDFLAGS} ./cmd/ixshot-controller

ixshot-processor.x: pkg/messages/lightroomtask.pb.go
        go build ${LDFLAGS} ./cmd/ixshot-processor

pkg/messages/lightroomtask.pb.go: pkg/messages/lightroomtask.proto
        protoc --plugin=`which protoc-gen-go` --go_out=. pkg/messages/*.proto

Всякие install и deps убрал, с ними вроде все более-менее понятно

Переводчику спасибо, но — src/, main.go без cmd/

.env
Makefile
main.go
bin/
src/
vendor/

плохо согласуется с project-layout
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации