11使用 Go 管理 Makefile

简介

很多时候, 我们需要运行多个命令来能完成一件事,
又或者某个命令需要指定很多参数.

这个时候, 就需要使用脚本来取代这些复杂的命令,
减少输错命令的可能, 也可以为后来者指明常用的操作.

Makefile

Makefile 就是为此而生的, 相对于用途广泛的 shell 脚本,
Makefile 专注于构建自动化过程, 通常用于编译源码等.
很多项目都会提供 Makefile 文件, 只需要简单地运行
make 就能轻松完成编译构建的过程.

简单介绍下 Makefile 的规则.

target: dependencies
    system command(s)

target 通常是程序要生成的目标文件的名字. 但也可以是一个动作的名字.

dependencies 是依赖, 通常是文件, 完成 target 所需要的输入.

system command(s) 是完成 target 所需要运行的指令, 即 shell 命令.
一条语句一行, 使用单个 tab 缩进.

使用 make 命令可以运行各种 target. 如果不带 target 参数,
第一个 target 会被作为默认目标.

很多时候, Makefile 不是为了编译, 也不再引用任何文件,
仅仅是为了整合多个命令, 比写脚本方便多.
这个时候涉及到一个叫做伪目标的指令 .PHONY.
.PHONY 后面跟着的多个 target 都不是要生成的文件的名字,
而是指代一个动作, 一个行为. 比如 test 指运行测试, clean 清理文件等.

.PHONY: all test clean doc ci

更多内容可以参考
跟我一起写 Makefile

实践

注意, windows 下没有 make 命令, 所以 Makefile 也就无法使用.

你可以在 docker 容器中运行命令, 可以参考另一篇文章
在 VS Code 中使用容器开发.

在项目的根目录添加 Makefile 文件:

all: gotool build
build:
    @go build ./
run:
    @go run ./
clean:
    rm -f web
    find . -name "[._]*.s[a-w][a-z]" | xargs -i rm -f {}
gotool:
    go fmt ./
    go vet ./
ca:
    MSYS_NO_PATHCONV=1 openssl req -new -nodes -x509 -out conf/server.crt -keyout conf/server.key -days 3650 -subj "/C=CN/ST=SH/L=SH/O=CoolCat/OU=CoolCat Software/CN=127.0.0.1/emailAddress=coolcat@qq.com"
mysql:
    docker-compose up -d mysql
dbcli:
    docker-compose run --rm dbclient

help:
    @echo "make - 格式化 Go 代码, 并编译生成二进制文件"
    @echo "make build - 编译 Go 代码, 生成二进制文件"
    @echo "make run - 直接运行 Go 代码"
    @echo "make clean - 移除二进制文件和 vim swap files"
    @echo "make gotool - 运行 Go 工具 'fmt' and 'vet'"
    @echo "make ca - 生成证书文件"
    @echo "make mysql - 启动 mysql 服务器"
    @echo "make dbcli - 连接到 mysql 命令行"

.PHONY: all build run clean gotool ca mysql dbcli help

这里的所有 target 都是伪目标.用来包装一些简单的 shell 命令.

可以在项目根目录下运行以下命令:

  • make - 格式化 Go 代码, 并编译生成二进制文件
  • make build - 编译 Go 代码, 生成二进制文件
  • make run - 直接运行 Go 代码
  • make clean - 移除二进制文件和 vim swap files
  • make gotool - 运行 Go 工具 'fmt' and 'vet'
  • make ca - 生成证书文件
  • make mysql - 启动 mysql 服务器
  • make dbcli - 连接到 mysql 命令行
  • make help - 查看帮助信息

有了 Makefile 的帮助, 很多事情变得简单起来了,
比如要生成证书文件, 只需要运行 make ca 就行了,
不用输入一大行命令了.

总结

Makefile 是 linux 下常用的工具, 对于提升效率是非常有效的.

当前部分的代码

作为版本 v0.11.0

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 来自陈浩的一片老文,但绝对营养。 示例工程:3 个头文件*.h,和 8 个 C 文件*.c。 初 编译过程,源文件...
    周筱鲁阅读 4,677评论 0 17
  • makefile关系到整个工程的编译规则,一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干的目录当中,...
    Joe_HUST阅读 1,870评论 0 3
  • Makefile规则 一句话总结就是依赖关系,简单如下所示 target … : prerequisites … ...
    明明就_c565阅读 4,740评论 0 2
  • 金钱至上吗?得不到的总是最好的,拥有之后又回头思考人生,大概这是每个人必须经历的成长过程吧 人们通...
    良人_e64c阅读 294评论 1 3
  • 整形超声刀是什么意思?做过的来上上课。 我猜应该很多朋友们说起超声刀的效果,都是头头是道, 但是对超声刀本身其实一...
    183649gw阅读 281评论 0 0