go 项目 makefile 编写模板
常见的指令:
- vendor
- dev
- start
- demo
- demo-start
- dist
- test
- clean
如果支持 docker,则增加下列三个执行:
- doker-build
- docker-run
- docker-upload
如果支持 swagger,则增加下列指令:
- swagger: $(SWAG) $(SWAGGER_OUTPUT)
总指令,包含下面两条指令 - $(SWAGGER_OUTPUT)
执行 swaggo 生成 swagger 文件 - (SWAG)
安装 swaggo
all 执行一般包含:dev demo dist docker-build
完整的实例:
PRJ = mgsc
BIN = yunju-api
MAIN = sys/api/main.go
HANDLER = sys/api/web/handlers.go
SWAG = $(shell go env GOPATH)/bin/swag
SWAGGER_DIR = swagger
SWAGGER_DEPS = $(MAIN) $(HANDLER)
SWAGGER_OUTPUT = $(SWAGGER_DIR)/docs.go $(SWAGGER_DIR)/swagger.json $(SWAGGER_DIR)/swagger.yaml
VERSION := $(shell cat version.txt)
DOCKER_PATH := r.addops.soft.360.cn/$(PRJ)/$(BIN)
DOCKER_PASSWD = Wy7Nv3Nn
.PHONY: vendor dist test clean swagger
all: dev demo dist docker-build
vendor:
git config --global url."ssh://git@git.corp.qihoo.net".insteadOf "https://git.corp.qihoo.net"
go mod vendor
# dev
dev: TARGET=./build/dev/$(USER).$(BIN)
dev: vendor $(SWAGGER_OUTPUT)
mkdir -p ./build/dev
go build -mod=vendor -gcflags=all='-N -l' -o $(TARGET) $(MAIN)
ls -l $(TARGET)
tools/init.sh dev
start: TARGET=./build/dev/$(USER).$(BIN)
start: dev
$(TARGET) --config conf/config.$(USER).yaml --env dev
# demo
demo: TARGET=./build/demo/demo.$(BIN)
demo: vendor $(SWAGGER_OUTPUT)
mkdir -p ./build/demo
go build -mod=vendor -gcflags=all='-N -l' -o $(TARGET) $(MAIN)
ls -l $(TARGET)
tools/init.sh demo
demo-start: TARGET=./build/demo/demo.$(BIN)
demo-start: demo
$(TARGET) --config conf/config.demo.yaml --env demo
# dist
dist: TARGET=./dist/$(BIN)
dist: vendor $(SWAGGER_OUTPUT)
mkdir -p dist
CGO_ENABLED=0 go build -mod=vendor -o $(TARGET) $(MAIN)
ls -l $(TARGET)
# docker
docker-build: dist
docker build . --network host -t $(DOCKER_PATH)
docker images | head -n2
docker-run:
docker run -it $(DOCKER_PATH)
docker-upload:
starkctl push -u $(PRJ) -p $(DOCKER_PASSWD) $(DOCKER_PATH)
# swagger
swagger: $(SWAG) $(SWAGGER_OUTPUT)
$(SWAGGER_OUTPUT): $(SWAGGER_DEPS)
$(SWAG) init --parseDependency --parseDepth 2 -d sys/api/ -o $(SWAGGER_DIR)
$(SWAG):
go get -u github.com/swaggo/swag/cmd/swag
go mod vendor
# test
test: vendor
go test $(TFLAG) ./tests/...
clean:
# find . -path "./build/*" ! -name ".gitignore" -delete
# find . -path "./dist/*" ! -name ".gitignore" -delete
rm -rfv build/* dist/* $(SWAGGER_OUTPUT)

浙公网安备 33010602011771号