目录从入门示例开始makefile语法详解再来一个完整示例总结Makefile提供有效方式实现自动化构建任务,与Java中的Maven类似。Makefile主要应用场景为使用目标(标
Makefile提供有效方式实现自动化构建任务,与Java中的Maven类似。Makefile主要应用场景为使用目标(标签)运行不同任务。
需要提醒的是,make工具仅在unix环境上使用,如果是windows,需要安装linux环境依赖(如:mingw)执行make命令。
go build main.go
运行程序使用命令为:
go build -o main.out main.go
./main.out
下面使用单个Makefile文件(文件命名为Makefile,首字母大写,没有扩展名),内容如下:
BINARY_NAME=main.out
build:
go build -o ${BINARY_NAME} main.go
run:
go build -o ${BINARY_NAME} main.go
./${BINARY_NAME}
clean:
go clean
rm ${BINARY_NAME}
现在可以运行build 和 run 任务:
make build
make run
如果需要增加缺省标签,可以使用all标签:
BINARY_NAME=main.out
## 缺省任务,不要换行
all: build test
build:
go build -o ${BINARY_NAME} main.go
test:
go test -v main.go
run:
go build -o ${BINARY_NAME} main.go
./${BINARY_NAME}
clean:
go clean
rm ${BINARY_NAME}
这时直接运行make命令,则执行build test两个任务。当然我们还可以定义其他复杂任务,假如项目有多个依赖,需要通过go get package-name
命令安装,我们可以定义deps目标,实现自动安装所有相关依赖,举例:
运行命令:make deps
则自动安装相关依赖。
通过上面简单示例大概了解Makefile的用途,下面介绍其基本语法,首先介绍几个术语:目标、依赖、任务以及变量。
variable_name=hello-world
, 引用变量使用${variable_name}
变量举例:
x = foo
y = $(x) bar
x = later
all:
echo $(y)
这里all为默认目标,执行make命令输出结果:
echo later bar
later bar
下面我们通过稍微复杂的示例来说明Makefile的用法,go代码很简单,但需要编译不同平台的可执行文件。首先定义main.go文件:
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
要运行项目,正常需要构建并运行二进制文件:
go build main.go
GOARCH=amd64 GOOS=darwin go build -o hello-world main.go
如果希望创建多个OS平台,需要运行多次命令:
GOARCH=amd64 GOOS=darwin go build -o hello-world-darwin main.go
GOARCH=amd64 GOOS=linux go build -o hello-world-linux main.go
GOARCH=amd64 GOOS=window go build -o hello-world-windows main.go
上面命令可以使用Makefile,在项目根目录下创建Makefile文件:
BINARY_NAME=hello-world
build:
GOARCH=amd64 GOOS=darwin go build -o ${BINARY_NAME}-darwin main.go
GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
GOARCH=amd64 GOOS=window go build -o ${BINARY_NAME}-windows main.go
run:
./${BINARY_NAME}
build_and_run: build run
clean:
go clean
rm ${BINARY_NAME}-darwin
rm ${BINARY_NAME}-linux
rm ${BINARY_NAME}-windows
现在可以简单运行make命令:
make run
make build
也可以运行组合命令:
make build_and_run
最后还可以运行清理命令:
make clean
这些命令非常方便,有助于开发过程流水线。开发团队成员可以使用相同命令,减少操作不一致造成错误,提升构建效率。
下面扩展上面的示例,增加一些自动化任务,包括测试、覆盖率测试、代码检查以及管理依赖。具体内容如下:
BINARY_NAME=hello-world
build:
GOARCH=amd64 GOOS=darwin go build -o ${BINARY_NAME}-darwin main.go
GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go
GOARCH=amd64 GOOS=window go build -o ${BINARY_NAME}-windows main.go
run:
./${BINARY_NAME}
build_and_run: build run
clean:
go clean
rm ${BINARY_NAME}-darwin
rm ${BINARY_NAME}-linux
rm ${BINARY_NAME}-windows
test:
go test ./...
test_coverage:
go test ./... -coverprofile=coverage.out
dep:
go mod download
vet:
go vet
lint:
golangci-lint run --enable-all
现在可以简单执行下列任务:
make test
make test_coverage
make dep
make vet
make lint
注意:我们使用了外部包golanGCi-lint,需要使用 go mod ,确保在go.mod文件中增加相应依赖。
Golang是开发大型项目的流行语言。较大的项目会有多人协作,并且需要持续的自动化构建。通过自动化开发、测试和发布等任务来简化构建过程,会带来更快、更可靠、更简单的开发体验。
到此这篇关于Golang Makefile示例深入讲解使用的文章就介绍到这了,更多相关Go Makefile内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Golang Makefile示例深入讲解使用
本文链接: https://lsjlt.com/news/177511.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0