golang makefile提高效率
#Go parameters
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
SOURCE_NAME=demo
BINARY_NAME=demo
BINARY_UNIX=$(BINARY_NAME)_d
DEPS_URL=https://git.code.com/server/src/service
all: test build
build:
$(GOBUILD) -o $(BINARY_NAME) -v
test:
$(GOTEST) -v ./...
clean:
$(GOCLEAN)
rm -f $(BINARY_NAME)
rm -f $(BINARY_UNIX)
run:
$(GOBUILD) -o $(BINARY_NAME) -v ./...
./$(BINARY_NAME)
deps:
git clone $(DEPS_URL)
# Cross compilation
build-linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o $(BINARY_UNIX) -v
docker-build:
docker run --rm -it -v "$(GOPATH)":/go -w /go/src/service/$(SOURCE_NAME) golang:1.13 go build -o "$(BINARY_UNIX)" -v
1.go命令和变量定义
# Go parameters
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
SOURCE_NAME=demo
BINARY_NAME=demo
BINARY_UNIX=$(BINARY_NAME)_d
DEPS_URL=https://git.code.com/server/src/service
方便在后面的命令使用,和个人习惯有关
2.构建命令
all: test build
build:
$(GOBUILD) -o $(BINARY_NAME) -v
test:
$(GOTEST) -v ./...
单纯执行make
就是就是编译+跑测试,还是挺方便的
如果是make build
就是build项目,make test
就是单纯跑测试
3.清除文件
clean:
$(GOCLEAN)
rm -f $(BINARY_NAME)
rm -f $(BINARY_UNIX)
make clean
,会删除当前项目构建的可执行文件,并且go clean清除项目依赖
4.懒人一键构建+运行
run:
$(GOBUILD) -o $(BINARY_NAME) -v ./...
./$(BINARY_NAME)
make run
一键实现:构建+运行
5.ci/cd下载依赖
deps:
git clone $(DEPS_URL)
如果你的构建系统是ci/cd,那么在构建时需要下载依赖,此时可以用make deps
来下载项目对应的依赖
6.跨平台编译
# Cross compilation
build-linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o $(BINARY_UNIX) -v
docker-build:
docker run --rm -it -v "$(GOPATH)":/go -w /go/src/service/$(SOURCE_NAME) golang:1.13 go build -o "$(BINARY_UNIX)" -v
make build-linux
是编译打包gcc的可执行文件,支持编译后在其他linux平台运行,编译会更耗时。
make docker-build
是使用docker来编译,这样是比较好的,因为可以统一编译版本,不用使用make build-linux
,编译更快,可执行文件版本统一