edit ?= service GOHOSTOS = $(shell go env GOHOSTOS) GOHOSTARCH = $(shell go env GOHOSTARCH) GOOS ?= ${GOHOSTOS} GOARCH ?= ${GOHOSTARCH} END = ifeq (${GOOS}, windows) END=.exe endif EDIT = ${edit}${END} commitId = $(shell git rev-parse HEAD) GO_TAGS = jsoniter GO_LDFLAGS = -w -s -X main.buildOS="${GOHOSTOS}/${GOHOSTARCH}" -X main.commitId="${commitId}" GO_FLAGS = -ldflags="${GO_LDFLAGS}" -tags="${GO_TAGS}" $(shell go env -w CGO_ENABLED=0) catNoGoFile = $(filter-out %.go, $(wildcard ${1}/*)) catGoFile = $(filter %.go %_test.go, $(wildcard ${1}/*)) FindGoFile = $(foreach i,${1},$(if $(call catNoGoFile,${i}),$(call FindGoFile,$(call catNoGoFile,${i}))) $(call catGoFile,${i})) FILES = $(call FindGoFile,.) ${EDIT}:${FILES} Makefile @echo "Lock Files: ${FILES}" CGO_ENABLED=0 GOOS=${GOOS} GOARCH=${GOARCH} go build -o $@ ${GO_FLAGS} ./com ${FILES}: .PHONY: test clean run clean: -rm ${EDIT} test: @echo "Lock Files: ${FILES}" run:${EDIT} nohup ${EDIT} > server.log 2>&1 &