golang

makefile提高效率

Posted by Liangjf on March 14, 2021

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,编译更快,可执行文件版本统一