使用Make编辑Go程序

2023年 10月 1日 130.1k 0

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方法
  • PowerShell安装Choco
  • Set-ExecutionPolicy Bypass -Scope Process -Force; 
    iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
  • 管理员权限启动PowerShell,然后运行以下命令进行安装:
  • 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 #运行结果

    image.png

    三、附: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)
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论