1
0
Fork 0
Go项目Makefile模板
  • Makefile 92.1%
  • Go 7.9%
Find a file
2026-05-30 22:12:46 +08:00
.gitignore init 2026-05-30 22:12:46 +08:00
go.mod init 2026-05-30 22:12:46 +08:00
main.go init 2026-05-30 22:12:46 +08:00
Makefile init 2026-05-30 22:12:46 +08:00
README.md init 2026-05-30 22:12:46 +08:00

go-makefile-template

这是一个面向 Go 项目的 Makefile 模板,用来统一管理常见开发流程,包括格式化、静态检查、依赖更新、本地构建、运行和多平台交叉编译。

它的目标不是绑定某个具体业务项目,而是提供一份可以直接复制和调整的通用模板。

模板特性

  • 支持本地构建和运行
  • 支持 Linux、macOS、FreeBSD、Windows 多平台交叉编译
  • 支持通过变量控制 CGO
  • 支持通过 MAIN_DIR 指定入口目录
  • 自动注入 Git 版本、提交哈希和构建时间
  • 通过注释约定自动生成帮助信息和平台列表
  • 统一日志输出格式,便于查看构建过程

环境要求

  • Go
  • make
  • 可选:git

如果当前目录是 Git 仓库,构建时会自动注入以下变量:

  • GIT_VERSION
  • GIT_COMMIT
  • BUILD_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 会先执行 build
  • clean 执行前会要求确认

构建产物

默认情况下,本地构建产物输出到:

./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 项目,通常只需要关注下面几项:

  1. 调整 MAIN_DIR 到你的入口目录
  2. 根据需要决定 CGO 默认值
  3. 保持 ## 和 ### 注释约定
  4. 根据需要增删平台构建目标
  5. 确认你的 main 包支持接收构建时注入的版本变量