#!/usr/bin/env gmake -f GOOPTS=CGO_ENABLED=0 BUILDOPTS=-ldflags="-s -w" -a -gcflags=all=-l -trimpath -buildvcs=false MYNAME=bunny-bot BINARY=$MYNAME RMCMD=$(RM) -r # На windows имя бинарника может зависеть не только от платформы, но и от выбранной цели, для linux-а суффикс .exe # не нужен ifeq ($(OS),Windows_NT) ifeq ($(strip $(GOOS)),) BINARY=${MYNAME}.exe RMCMD=DEL /Q /F endif endif # Явно определяем символ новой строки, чтобы избежать неоднозначности на windows define IFS endef all: clean build build: # Ну и дальше просто билдим бинарник средствами гошки ifeq ($(OS),Windows_NT) # вариант с powershell на windows ifeq ($(SHELL),sh.exe) SET "CGO_ENABLED=0" go build ${BUILDOPTS} -o ${BINARY} ./cmd/${MYNAME} else # вариант с jetbrains golang на windows CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ./cmd/${MYNAME} endif else # вариант с bash/git (windows) и bash (linux) CGO_ENABLED=0 go build ${BUILDOPTS} -o ${BINARY} ./cmd/${MYNAME} endif clean: ifeq ($(OS),Windows_NT) ifeq (,$(findstring(Git/usr/bin/sh.exe, $(SHELL)))) rm -rf ${BINARY} else if exist ${BINARY} ${RMCMD} ${BINARY} >nul endif else ${RMCMD} ${BINARY} endif upgrade: ifeq ($(OS),Windows_NT) # вариант с jetbrains golang на windows или powershell на windows ifeq ($(SHELL),sh.exe) if exist vendor del /F /S /Q vendor >nul # вариант с git/bash на windows else $(RM) -r vendor endif # вариант с bash на linux else $(RM) -r vendor endif go get -d -u ./... go mod tidy go mod vendor # vim: set ft=make noet ai ts=4 sw=4 sts=4: