Comments 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.
Кроме того, вы используете расширения GNU make, т.е. на системах, где установлен другой вариант утилиты, вылезут ошибки.
Еще вы не учитываете, что зависимости могут выполняться одновременно, если make запустить с ключом -j. В результате 'make -j 2 restart-server' может привести к странным результатам (а еще у вас start-server — это на самом деле restart, т.к. сервер предварительно тушится).
Теперь о мелочах.
Цели для make называются не как душе угодно. Есть стандарт де-факто, используемый в юниксах:
'make' без аргументов исполняет цель по умолчанию (обычно это all). У вас — почему-то выводит помощь.
'make all' собирает всё (обычно это все бинари и нужные им библиотеки). У вас она тоже выводит помощь.
'make install' устанавливает собранные бинари в системе (предварительно может их собрать, если нужно). Понятно, что сия команда должна исполняться из-под рута и в общем — небезопасна. У вас же на нее повешено совершенно другое действие. Я бы ее обозвал make prepare, например.
Единственное, что более-менее получилось интуитивно-понятным — это make clean.
+6
У меня вот так, используется 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 убрал, с ними вроде все более-менее понятно
0
Переводчику спасибо, но — src/, main.go без cmd/
0
0
Sign up to leave a comment.
Пример создания Makefile для Go-приложений