Skip to content

Instantly share code, notes, and snippets.

@mozhu1024
Created July 17, 2020 10:55
Show Gist options
  • Save mozhu1024/558d8240b1e4b125536582aa8dfc1f82 to your computer and use it in GitHub Desktop.
Save mozhu1024/558d8240b1e4b125536582aa8dfc1f82 to your computer and use it in GitHub Desktop.
[Makefile] Makefile Template #make #dev #build
#!/usr/bin/env make
TARGET=./build
ARCHS=amd64 386
LDFLAGS="-s -w"
GCFLAGS="all=-trimpath=$(shell pwd)"
ASMFLAGS="all=-trimpath=$(shell pwd)"
GOPATH=$(shell go env GOPATH)
SOURCE="./cmd/"
APPNAMES=test1 test2
current:
@mkdir -p ${TARGET}/
@rm -f ./${TARGET}/*
@for APPNAME in ${APPNAMES}; do \
echo "[*] Building $${APPNAME} ..." ; \
go build -o ${TARGET}/$${APPNAME} ${SOURCE}/$${APPNAME} ; \
done; \
echo "[+] Current Built."
windows:
@for GOARCH in ${ARCHS}; do \
echo "[*] Building for windows $${GOARCH} ..." ; \
mkdir -p ${TARGET}/windows-$${GOARCH} ; \
for APPNAME in ${APPNAMES}; do \
echo "[+] $${APPNAME} ..." ; \
GOOS=windows GOARCH=$${GOARCH} GO111MODULE=on CGO_ENABLED=0 \
go build -ldflags=${LDFLAGS} -gcflags=${GCFLAGS} -asmflags=${ASMFLAGS} \
-o ${TARGET}/windows-$${GOARCH}/$${APPNAME}.exe ${SOURCE}/$${APPNAME}; \
done; \
done; \
echo "[+] Windows Built."
linux:
@for GOARCH in ${ARCHS}; do \
echo "[*] Building for linux $${GOARCH} ..." ; \
mkdir -p ${TARGET}/linux-$${GOARCH} ; \
for APPNAME in ${APPNAMES}; do \
echo "[+] $${APPNAME} ..." ; \
GOOS=linux GOARCH=$${GOARCH} GO111MODULE=on CGO_ENABLED=0 \
go build -ldflags=${LDFLAGS} -gcflags=${GCFLAGS} -asmflags=${ASMFLAGS} \
-o ${TARGET}/linux-$${GOARCH}/$${APPNAME} ${SOURCE}/$${APPNAME}; \
done; \
done; \
echo "[+] Linux Built."
darwin:
@for GOARCH in ${ARCHS}; do \
echo "[*] Building for darwin $${GOARCH} ..." ; \
mkdir -p ${TARGET}/darwin-$${GOARCH} ; \
for APPNAME in ${APPNAMES}; do \
echo "[+] $${APPNAME} ..." ; \
GOOS=darwin GOARCH=$${GOARCH} GO111MODULE=on CGO_ENABLED=0 \
go build -ldflags=${LDFLAGS} -gcflags=${GCFLAGS} -asmflags=${ASMFLAGS} \
-o ${TARGET}/darwin-$${GOARCH}/$${APPNAME} ${SOURCE}/$${APPNAME}; \
done; \
done; \
echo "[+] Darwin Built."
all: clean fmt update lint test darwin linux windows
fmt:
@go fmt ./...; \
echo "[+] Fmted."
update:
@go get -u; \
go mod tidy -v; \
echo "[+] Updated."
test:
@go test -v -race ./... ; \
echo "[+] Tested."
lint:
@go get -u github.com/golangci/golangci-lint@master ; \
golangci-lint run ./... ; \
go mod tidy ; \
echo "[+] Linted."
installd: current
@cp -f ${TARGET}/pand ${GOPATH}/bin/pand; \
test -f ${GOPATH}/bin/pand && echo "[+] pand Installed";
install: current
@for APPNAME in ${APPNAMES}; do \
echo "[*] Install $${APPNAME} ..." ; \
cp -f ${TARGET}/$${APPNAME} ${GOPATH}/bin/$${APPNAME}; \
test -f ${GOPATH}/bin/$${APPNAME} && echo "[+] $${APPNAME} Installed"; \
done;
uninstall: remove
remove:
@for APPNAME in ${APPNAMES}; do \
echo "[*] Remove $${APPNAME} ..." ; \
rm -f ${GOPATH}/bin/$${APPNAME}; \
test -f ${GOPATH}/bin/$${APPNAME} || echo "[+] $${APPNAME} Removed"; \
done;
clean:
@rm -rf ${TARGET}/* ; \
go clean ./... ; \
echo "[+] Cleaned."
#!/usr/bin/env make
TARGET=./build
ARCHS=amd64 386
LDFLAGS="-s -w"
GCFLAGS="all=-trimpath=$(shell pwd)"
ASMFLAGS="all=-trimpath=$(shell pwd)"
GOPATH=$(shell go env GOPATH)
SOURCE="./cmd/"
APPNAME=test
current:
@mkdir -p ${TARGET}/
@rm -f ./${TARGET}/${APPNAME}
@echo "[*] Building for current $${GOARCH} ..."
@go build -o ${TARGET}/${APPNAME} ${SOURCE}; \
echo "[+] Current Built."
fmt:
@go fmt ./...; \
echo "[+] Fmted."
update:
@go get -u; \
go mod tidy -v; \
echo "[+] Updated."
windows:
@for GOARCH in ${ARCHS}; do \
echo "[*] Building for windows $${GOARCH} ..." ; \
mkdir -p ${TARGET}/${APPNAME}-windows-$${GOARCH} ; \
GOOS=windows GOARCH=$${GOARCH} GO111MODULE=on CGO_ENABLED=0 go build -ldflags=${LDFLAGS} -gcflags=${GCFLAGS} -asmflags=${ASMFLAGS} -o ${TARGET}/${APPNAME}-windows-$${GOARCH}/${APPNAME}.exe ${SOURCE}; \
done; \
echo "[+] Window Built."
linux:
@for GOARCH in ${ARCHS}; do \
echo "[*] Building for linux $${GOARCH} ..." ; \
mkdir -p ${TARGET}/${APPNAME}-linux-$${GOARCH} ; \
GOOS=linux GOARCH=$${GOARCH} GO111MODULE=on CGO_ENABLED=0 go build -ldflags=${LDFLAGS} -gcflags=${GCFLAGS} -asmflags=${ASMFLAGS} -o ${TARGET}/${APPNAME}-linux-$${GOARCH}/${APPNAME} ${SOURCE}; \
done; \
echo "[+] Linux Built."
darwin:
@for GOARCH in ${ARCHS}; do \
echo "[*] Building for darwin $${GOARCH} ..." ; \
mkdir -p ${TARGET}/${APPNAME}-darwin-$${GOARCH} ; \
GOOS=darwin GOARCH=$${GOARCH} GO111MODULE=on CGO_ENABLED=0 go build -ldflags=${LDFLAGS} -gcflags=${GCFLAGS} -asmflags=${ASMFLAGS} -o ${TARGET}/${APPNAME}-darwin-$${GOARCH}/${APPNAME} ${SOURCE} ; \
done; \
echo "[+] Drawin Built."
all: clean fmt update lint test darwin linux windows
test:
@go test -v -race ./... ; \
echo "[+] Tested."
lint:
@go get -u github.com/golangci/golangci-lint@master ; \
golangci-lint run ./... ; \
go mod tidy ; \
echo "[+] Linted."
install: current
@echo "[*] Install ${APPNAME} ..." ; \
cp -f ${TARGET}/${APPNAME} ${GOPATH}/bin/${APPNAME}; \
test -f ${GOPATH}/bin/${APPNAME} && echo "[+] ${APPNAME} Installed";
uninstall: remove
remove:
echo "[*] Remove ${APPNAME} ..." ; \
rm -f ${GOPATH}/bin/${APPNAME}; \
test -f ${GOPATH}/bin/${APPNAME} || echo "[+] ${APPNAME} Removed";
clean:
@rm -rf ${TARGET}/* ; \
go clean ./... ; \
echo "Cleaned."
# proto:
# find . -name '*.proto' | xargs -n1 protoc -I=. -I=$${GOPATH}/src -I=$${GOPATH}/src/github.com/gogo/protobuf/protobuf --gofast_out=plugins=grpc:.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment