Go项目Makefile模板
- Makefile 92.1%
- Go 7.9%
| .gitignore | ||
| go.mod | ||
| main.go | ||
| Makefile | ||
| README.md | ||
go-makefile-template
这是一个面向 Go 项目的 Makefile 模板,用来统一管理常见开发流程,包括格式化、静态检查、依赖更新、本地构建、运行和多平台交叉编译。
它的目标不是绑定某个具体业务项目,而是提供一份可以直接复制和调整的通用模板。
模板特性
- 支持本地构建和运行
- 支持 Linux、macOS、FreeBSD、Windows 多平台交叉编译
- 支持通过变量控制
CGO - 支持通过
MAIN_DIR指定入口目录 - 自动注入 Git 版本、提交哈希和构建时间
- 通过注释约定自动生成帮助信息和平台列表
- 统一日志输出格式,便于查看构建过程
环境要求
- Go
make- 可选:
git
如果当前目录是 Git 仓库,构建时会自动注入以下变量:
GIT_VERSIONGIT_COMMITBUILD_TIME
如果获取不到 Git 信息,会自动回退到默认值。
变量说明
这份模板中最常用的可配置变量如下。
MAIN_DIR
用于指定 Go 程序入口目录,默认值是当前目录:
MAIN_DIR := .
如果你的入口在 cmd/server,可以改成:
MAIN_DIR := ./cmd/server
构建和运行时,最终都会基于这个目录执行 go build。
BUILD_DIR
用于指定构建产物输出目录:
BUILD_DIR := ./build
CGO
用于控制是否启用 CGO,默认关闭:
CGO := 0
默认执行:
make build
等价于:
CGO_ENABLED=0 go build ...
如果需要启用 CGO,可以在执行 make 时传参:
make CGO=1 build
也可以用于运行或交叉编译:
make CGO=1 run
make CGO=1 build-linux-amd64
注释约定
这份模板约定用注释来生成文档化输出。
##
以 ## 开头的注释用于 make help,表示普通帮助信息。
例如:
## build: build the application
build:
执行:
make help
就会看到这类目标说明。
###
以 ### 开头的注释用于 make list-all,表示支持的平台目标。
例如:
### build-linux-amd64: -- Linux AMD64
build-linux-amd64:
执行:
make list-all
就会列出所有带 ### 注释的平台目标。
常用命令
查看帮助:
make help
查看支持的平台:
make list-all
格式化代码:
make fmt
静态检查:
make vet
更新依赖:
make dep
本地构建:
make build
运行程序:
make run
清理构建产物:
make clean
命令依赖关系
当前 Makefile 中有一些串联关系:
run会先执行buildclean执行前会要求确认
构建产物
默认情况下,本地构建产物输出到:
./build/<app-name>
当前模板会根据模块名自动推导二进制名称。
例如模块名是:
git.zhuangzhuang.io/zhuangzhuang/hello
则默认产物名为:
hello
所以执行 make build 后,生成文件通常是:
./build/hello
平台构建
单平台构建
make build-linux-amd64
make build-linux-arm64
make build-darwin-amd64
make build-darwin-arm64
make build-freebsd-amd64
make build-freebsd-arm64
make build-windows-amd64
make build-windows-arm64
按系统批量构建
make build-linux
make build-darwin
make build-freebsd
make build-windows
全平台构建
make build-all
当前模板支持的平台包括:
Linux AMD64
Linux ARM64
Darwin AMD64
Darwin ARM64
FreeBSD AMD64
FreeBSD ARM64
Windows AMD64
Windows ARM64
Windows 目标会自动生成 .exe 后缀文件,其余平台不会。
日志输出
模板中定义了统一日志函数,命令执行时会输出带时间戳的日志,例如:
2026-05-30T12:34:56+0800 -- Building ./build/hello-linux-amd64...
2026-05-30T12:34:57+0800 -- Build ./build/hello-linux-amd64 done.
快速复用
如果你想把这份模板复制到别的 Go 项目,通常只需要关注下面几项:
- 调整
MAIN_DIR到你的入口目录 - 根据需要决定
CGO默认值 - 保持
##和###注释约定 - 根据需要增删平台构建目标
- 确认你的
main包支持接收构建时注入的版本变量