
首先,我们假设一个简单的Go项目,其目录结构如下:
my-go-project/ ├── Makefile ├── main.go ├── go.mod ├── go.sum ├── pkg/ │   └── example.go ├── cmd/ │   └── myapp/ │       └── main.go └── test/     └── example_test.go Makefile 是一种配置文件,包含了一系列的规则,用于指导 make 工具如何构建和管理项目。其主要功能包括:
在Makefile中,每个任务称为一个“目标”(target),目标可以依赖其他目标。每个目标由依赖和一组命令组成。Makefile的基本语法如下:
target: dependencies     command 以下是一个针对Go项目的Makefile示例:
# Go parameters GOCMD=go GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean GOTEST=$(GOCMD) test GOFMT=$(GOCMD) fmt GOMOD=$(GOCMD) mod BINARY_NAME=myapp BINARY_UNIX=$(BINARY_NAME)_unix  all: test build  build:  	$(GOBUILD) -o $(BINARY_NAME) -v ./cmd/myapp  test:  	$(GOTEST) -v ./...  clean:  	$(GOCLEAN) 	rm -f $(BINARY_NAME) 	rm -f $(BINARY_UNIX)  fmt:  	$(GOFMT) ./...  deps:  	$(GOMOD) tidy  run:  	$(GOCMD) run ./cmd/myapp  .PHONY: all build test clean fmt deps run test 和 build。运行 make 时会先运行测试,然后构建项目。myapp。命令 go build -o myapp -v ./cmd/myapp 编译指定目录下的文件。go test -v ./... 会递归地运行项目中的所有测试。go clean 会删除编译生成的对象文件,随后删除二进制文件。go fmt ./... 会递归地格式化项目中的所有Go源文件。go mod tidy 会清理并添加缺少的依赖。go run ./cmd/myapp 会编译并运行项目。构建项目:
make build 运行测试:
make test 清理项目:
make clean 格式化代码:
make fmt 管理依赖:
make deps 运行项目:
make run Go项目中使用Makefile,可以大大简化常见的开发和部署任务,提高工作效率。Makefile提供了一个简单而强大的方式来管理构建、测试、格式化和其他任务。