go项目使用go build 与 MakeFile 构建项目

转载请注明出处:

一、Go Build 简要用法

核心作用

  • 编译Go代码生成可执行文件

  • 适合快速编译和简单项目

常用命令 

复制代码
# 基本编译
go build                      # 编译当前目录
go build -o app ./cmd/main    # 指定输出文件

# 交叉编译
GOOS=linux GOARCH=amd64 go build  # Linux版本
GOOS=windows go build             # Windows版本

应用

二、Makefile 简要用法

核心作用

  • 自动化构建流程,统一团队操作

  • 管理复杂依赖关系和构建步骤

  • 标准化开发、测试、部署流程

基本结构

复制代码
# 变量定义
APP = myapp
VERSION = 1.0.0

# 目标: 依赖
build: fmt test
    go build -o $(APP)

# 伪目标
.PHONY: clean
clean:
    rm -f $(APP)

关键优势

  1. 统一入口:团队使用相同命令

  2. 复杂流程简化:一键完成多个步骤

  3. 环境一致性:避免环境差异问题

  4. 文档作用:Makefile即构建文档

模板

复制代码
# 最小可用 Makefile
.PHONY: help build test clean

help:
    @echo "make build - 编译项目"
    @echo "make test  - 运行测试"
    @echo "make clean - 清理文件"

build:
    go build -o bin/app ./cmd/main

test:
    go test ./... -v

clean:
    rm -rf bin/

应用:

复制代码
EXE_LINUX=monitor
EXE_ARM64=monitor-arm64
EXE_DBG_LINUX=monitor-dbg
EXE_DBG_ARM64=monitor-dbg-arm64

all: monitor monitor-arm64


monitor: commit_id
        mkdir -p ../bin
        GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -tags 'pe' -o ../bin/$(EXE_LINUX) ./cmd/monitor.go
        cp ./cmd/monitor_no.conf  ../bin/monitor.conf

monitor-arm64: commit_id
        mkdir -p ../bin
        GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -tags 'pe' -o ../bin/$(EXE_ARM64) ./cmd/monitor.go
        cp ./cmd/monitor_no.conf  ../bin/monitor.conf

monitor-dbg: commit_id
        mkdir -p ../bin
        GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -gcflags "all=-N -l" -tags 'pe' -o ../bin/$(EXE_DBG_LINUX) ./cmd/monitor.go

monitor-dbg-arm64: commit_id
        mkdir -p ../bin
        GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -gcflags "all=-N -l" -tags 'pe' -o ../bin/$(EXE_DBG_ARM64) ./cmd/monitor.go

运行编译:

复制代码
root@xdd-virtual-machine:~/zeng/terra-monitor-23/terra-monitor/src# make all
mkdir -p ../bin
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -tags 'pe' -o ../bin/monitor ./cmd/monitor.go
cp ./cmd/monitor_no.conf  ../bin/monitor.conf
mkdir -p ../bin
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -tags 'pe' -o ../bin/monitor-arm64 ./cmd/monitor.go
cp ./cmd/monitor_no.conf  ../bin/monitor.conf

  

相关推荐
名字还没想好☜9 小时前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
liyinchi19882 天前
微信小程序支付遇到“由于小程序违规,支付功能暂时无法使用” 解决办法
java·微信小程序·go
天天喝旺仔2 天前
Go 泛型实战:从类型参数、约束到可复用泛型容器与函数
数据结构·算法·容器·go
gospace3 天前
【无标题】
go·gb28181·gowvp
我不会起名字3223 天前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯
江湖十年3 天前
Go GOPROXY 兜底链的坑:从一次诡异的 CI lint 失败说起
后端·面试·go
秋风点枝4 天前
gogogo!go语言感悟大观--打卡day01
go·devops
探索云原生4 天前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
右耳朵猫AI4 天前
Go周刊2026W37 | Ebitengine 纯 Go 化、simd 重写 TurboPFor、json/v2 落地
后端·微服务·go
福兮说4 天前
Gin 项目里的错误处理:让 Controller 不必知道错误是怎么来的
后端·go·gin·架构设计