IMG_9971.txt.txt
Edited: Thursday 1 May 2025

Saturday, August 21, 2021at 14:34

记 叉 一 次 对 Makefile 的 重 构

火 丁 笔 记

我 平 常 有 一 个 习 惯 , 就 是 不 断 看 以 前 写 的 代 码 , 想 着 有 没 有 哪 些 方 面 可

以 改 进 , 如 果 每 天 能 把 代 码 可 读 性 量 变 16, 那 么 日 积 月 累 就 是 质 变 :

前 些 天 我 们 写 过 一 次 对 Makefile 的 重 构 , 去 掉 了 一 处 重 复 代 码 的 坏 味

河 吊 T 本 文 就 让 我 们 看 看
可 消 灭 它 !

让 我 们 先 把 问 题 的 来 龙 去 脉 搞 清 楚 , 在 Golang 项 目 里 , 一 般 推 荐 在 根
目 录 创 建 一 个 名 为 tools.go 的 文 件 , 里 面 记 录 本 项 目 依 赖 的 相 关 工 具 ,
比 如 我 的 某 个 项 目 的 tools.go 如 下 :

/ +build tools

package tools

// __“github.com/cosmtrek/air“
/ _ _“github.com/goreleaser/goreleaser“
“github.com/bufbuild/buf/cmd/buf“

一 “github.com/grpc-ecosystem/grpc-
gateway/v2/protoc-gen-grpc-gateway“

一 “github.com/grpc-ecosystem/grpc-
gateway/v2/protoc-gen-openapivV2“
“github.com/securego/gosec/v2/cmd/gosec“

一 “github.com/tomwright/dasel/cmd/dasel“
一 “google.golang.org/grpc/cmd/protoc-gen-go-grpc“
一 “google.golang.org/protobuf/cmd/protoc-gen-go“

)

力 口 iP “ ak 木 4 云 『 一 h 一 人 +iy t g+/ / 亢 出 6 一 目 Au LE - 心 / 志 自 英 人
如 此 一 来 , 当 执 行 Tgo mod tidy1 的 时 候 , 依 赖 工 具 的 版 本 信 息 就 会
记 录 到 g6.mod, 接 下 来 一 般 推 荐 在 Makeile 里 创 建 一 个 dep 操 作 , 用
来 安 装 (make dep) 依 赖 工 具 :

.PHONY: dep
dep:
&@go install 飞
github.com/bufbuilLd/buf/cmd/buf 飞
github.com/grpc-ecosystem/grpc-
gateway/v2/protoc-gen-grpc-gateway 飞
github.com/grpc-ecosystem/grpc-
gateway/v2/protoc-gen-openapiV2
github.com/securego/gosec/V2/cmd/gosec
github.com/tomwright/dasel/cmd/dasel 飞
google.golang.org/grpc/cmd/protoc-gen-go-
grPC
google.golang.org/protobuf/cmd/protoc-gen-
go

看 上 去 不 错 , 但 是 细 心 的 你 估 计 已 经 发 现 重 复 代 码 的 坏 味 道 了 :
tools.go 和 Makefile 文 件 内 容 重 复 了 , 以 后 如 果 想 要 增 加 一 个 依 赖 工 具
的 话 , 那 么 两 个 文 件 都 要 改 !

下 面 让 我 们 看 看 如 何 重 构 : tools.go 和 Makefile 比 起 来 , 肯 定 tools.go
更 重 要 , 它 是 不 能 改 的 , 所 以 我 们 要 去 掉 Makefils 里 的 重 复 代 码 , 更
真 体 点 根 说 是 最 妤 能 在 \Makefile 里 通 过 解 析 tools.go 来 确 定 愚 要 抒 行
的 go install 操 作 , 这 不 就 是 awk 擅 长 的 工 作 么 :

.PHONY: dep
dep:

&@awk “$$1 ==““ { print \(5\) 2 | “xargs go install1“
} “ ./tools .go

真 ; 通 过 一 行 awk 代 码 , 我 们 神 奇 的 去 掉 了 原 本 一 坨 重 复 代 码 , 完

Backlinks