golang除了用内置了很多 go commands 可以帮助我们完成go每个阶段的开发工作之外,我们还可以借助GUN的Make做构建。
GUN和 MAKE工具是Linux 和 Unix 系统中一种常见的自动化构建工具,通常用于管理和组织软件项目。在 Go 语言中,使用 MAKE 工具可以轻松地管理和构建项目,并自动执行诸如编译、测试、安装等复杂的操作。
MAKE 工具最大的优势在于它可以根据指定的规则来自动执行一系列的任务,从而减少了手动操作的时间和错误率。在 Go 项目中,使用 MAKE 工具可以帮助开发人员完成以下工作:
- 编译和构建:MAKE工具可根据指定的规则自动编译和构建Go项目,生成可执行文件或库文件。
- 测试和检查:MAKE工具可自动运行项目中的单元测试、性能测试和代码检查,以确保项目质量和可靠性。
- 安装和部署:MAKE工具可将编译好的程序或库文件自动安装到系统中,并实现自动部署。
- 清理和卸载:MAKE工具可清除编译过程中生成的临时文件,卸载已安装的程序或库文件。
一、安装
on Linux
yum install -y make
on mac
如果你是mac的系统,系统是自带了的,如果是linux就需要自己安装下make,命令很简单。
on windows
常规的做法,大家都是使用安装MinGW包的方法来安装Make,但是这很繁琐,我并不推荐,我推荐使用Choco和Scoop来安装管理Make。
Choco方法
Set-ExecutionPolicy Bypass -Scope Process -Force;
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install make
---
# choco 安装其他有用的工具
scoop install grep gawk sed touch
MinGW方法
下载安装MinGW:www.mingw-w64.org/downloads/
下载好之后,解压,把bin文件夹加入到Windows的环境变量里面,使之可以全局运行。
然后,还需要把mingw32-make.exe
文件改名成make.exe
。
此方法比较繁琐,不如使用软件包管理器去直接安装make还方便多了。
另,通过软件包管理也能够安装mingw:
choco install mingw
scoop install mingw
二、完整例子
go自带命令
# 构建
go build .
# 运行
go run main.go
用Make
————————
| - ...
| - main.go
| - Makefile
|
Makefile内容如下
BINARY_NAME=App
run:
go build -o bin/$(BINARY_NAME) -v
./bin/$(BINARY_NAME)
说明:
- 第1行,声明了一个变量
BINARY_NAME
他的值是App
,方便后面使用 - 第2行,声明一个
target
,其实你可以理解成一个对外的方法 - 第3行,这就是这个
target
被调用时执行的脚本,这行就是build这个项目,编译后的二进制文件放在当前工程根目录下的bin
目录下,名字是变量BINARY_NAME
的值 - 第4行,这一行就是直接执行当前
bin
目录下的二进制文件
main.go
里面的源码如下:
package main
import "fmt"
func main() {
fmt.Println("看到我了")
}
make build #构建
# make install
make run #运行
make run #运行结果
三、附:Golang程序的Makefile示例
GOPATH=$(shell go env GOPATH)
GOARCH?=$(shell go env GOARCH)
# 用`ifeq ($(OS),Windows_NT)`来判断操作系统
ifeq ($(OS),Windows_NT)
IS_WINDOWS := 1
endif
BUILD_CMD = $(if $(IS_WINDOWS),
SET CGO_ENABLED=0&SET GOOS=$(1)&SET GOARCH=$(2)&go build -o .bin$(1)_$(2)$(3),
CGO_ENABLED=0 GOOS=$(1) GOARCH=$(2) go build -o ./bin/$(1)_$(2)/$(3))
linux:
$(call BUILD_CMD,linux,$(GOARCH),test)
windows:
echo $(IS_WINDOWS)
$(call BUILD_CMD,windows,$(GOARCH),test.exe)
mac:
$(call BUILD_CMD,darwin,$(GOARCH),test)