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)
posted @ 2022-04-05 11:52  汽酒吧  阅读(126)  评论(0)    收藏  举报