Go:Makefile使用方法介绍

2,747 阅读2分钟

当你经常在涉及Golang的大型项目中工作时,不断地输入构建和测试命令go build xx,go test xx ,往往是很耗时的。而且往往这些命令本身可能变得非同小可。

Makefile提供了一个非常有效的方法来为我们的应用程序自动编写任务。

让我们了解一下,我们如何使用makefiles轻松地设置我们的工作流程!

注意:虽然make工具链广受欢迎,但它只限于UNIX平台。因此,如果你使用Windows,你可能需要在Windows里面安装一个Linux环境(比如msys /WSL )来使用make命令。

在Go中使用Makefiles

Makefile的主要功能用途是使用 "标签 "轻松运行不同的任务。使用标签,make TAGNAME 将简单地运行对应于TAGNAME 的任务。

因此,让我们假设一个示例程序main.go 。如果你想构建这个文件,你通常会运行这个命令。

go build main.go

而如果你想直接执行该程序,你会这样做。

go build -o main.out main.go
./main.out

然而,用一个makefile ,你可以创建2个任务buildrun 来代替。

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}

现在,你可以像这样运行buildrun 任务。

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}

现在,这将构建和测试我们的main.go 程序,当我们运行时:

make

看到我们的工作现在变得多么容易了吗?这就是为什么这些构建工具链是非常有用的!

请注意,你可以在makefile中使用shell变量。变量BINARY_NAME ,实际上就是main.out ,所以美元符号将执行变量替换。

最重要的是,你不需要到此为止。你可以根据你的需要运行尽可能多的复杂任务。

例如,如果你的项目有多个依赖项,你需要使用go get package-name ,你也可以将其自动化。

我们可以创建一个单独的任务,叫做deps ,它将直接安装所有相关的软件包。

例如,如果我的项目需要Gorilla websocket库,我可以有一个这样的任务。

deps:
    go get github.com/gorilla/websocket

而当我运行

make deps

所有的依赖项都会被安装。

希望这篇文章能让你了解如何自动化构建任务并快速设置你的Golang项目工作流程。直到下一次!