Makefile编写

背景


  1. 以前学的一些东西需要记录下

Makefile 编写


  1. 以自己实际项目来阐述每个的用法
  2. 目录结构


    15324023686513.jpg
  1. 代码

PROJECT_ROOT?=$(shell pwd)
//项目名称
PROJECT_PKG?=ai-exam
//可执行文件名称
TARGET=exam
TARGET_PKG=$(PROJECT_PKG)/cmd
IMAGE_PREFIX_PRD= 线上环境仓库名称
IMAGE_PREFIX?=测试环境仓库名称
TARGET_IMAGE=$(IMAGE_PREFIX)/$(TARGET):0.1.0
TARGET_IMAGE_PRD=$(IMAGE_PREFIX_PRD)/$(TARGET):0.1.0

// make 执行image-tst
all:image-tst


// 编译项目
binary:
    CGO_ENABLED=0 go build -ldflags "-X main.version=$(GITVERSION)" \
         -o /go/src/$(PROJECT_PKG)/dist/$(TARGET) $(TARGET_PKG)
// 进入容器编译项目、并将项目的可执行文件移出
target:
    mkdir -p $(PROJECT_ROOT)/dist
    docker run --rm -i -v $(PROJECT_ROOT):/go/src/$(PROJECT_PKG) \
      -w /go/src/$(PROJECT_PKG) golang:1.10.2 \
      make binary  GITVERSION=`git describe --tags --always --dirty`

//测试环境打包成docker镜像
image-tst:target
    temp=`mktemp -d` && \
    cp $(PROJECT_ROOT)/dist/$(TARGET) $$temp && cp Dockerfile $$temp && \
    docker build -t $(TARGET_IMAGE) $$temp && \
    rm -rf $$temp
push-tst:
    docker push $(TARGET_IMAGE)

//线上环境打包成docker镜像
image-prd:target
    temp=`mktemp -d` && \
    cp $(PROJECT_ROOT)/dist/$(TARGET) $$temp && cp Dockerfile $$temp && \
    docker build -t $(IMAGE_PREFIX_PRD) $$temp && \
    rm -rf $$temp
push-prd:
    docker push $(TARGET_IMAGE_PRD)

// make clean
clean:
    rm -rf dist

.PHONY: image target clean push binary

你可能感兴趣的:(Makefile编写)