使用 Makefile 的好处
可以管理多个任务的命令。例如,build & run,test。
否则单单一个
go test -v ./...
就很难记住。
何况还会有很多需要记录的命令:
- go test
- build & run
- scp 到服务器,并重启服务
每个功能一个 shell 脚本,会显得很杂乱。放到一个统一的文件中,就非常方便了。
如果没有 Makefile 文件会怎样
> make
make: *** No targets specified and no makefile found. Stop.
参考项目
golang gin 项目的 Makefile 文件:
https://github.com/gin-gonic/gin/blob/master/Makefile
但是这个 Makefile 的语法为啥看起来跟下面参考文章里的语法截然不同呢?
https://sohlich.github.io/post/go_makefile/
还是 gin 项目的更正规些。
Makefile 的语法
GNU make 的文档虽然很详尽,但是对我来说太枯燥了。。。
找了专门针对 golang 的 Makefile 教程:
https://tutorialedge.net/golang/makefiles-for-go-developers/
边看边写,试试吧!
make: 'xxx' is up to date
在一个项目中执行 make test,然而并没有执行测试逻辑。
> make test
make: 'test' is up to date.
查了一下,原因是目录下有与 test 同名的文件或者目录导致, 确实目录有一个 test 目录用来存放测试文件。
解决方法: 增加一行 PHONY
.PHONY: test
test:
go test -v ./...
PHONY,中文翻译为:假的。
PHONY target 就是为了规避 target 名 (这里为 test) 与文件或目录名冲突的情况。 golang gin 项目的 Makefile 也是这样写的。
参考:
https://www.gnu.org/software/make/manual/make.html#Phony-Targets
整理成 VIM snippet
Done.
Makefile 与 Shell 脚本的区别
亲手写过一个 Makefile 就会发现,Makefile 大大简化了 Shell 脚本的开发工作量。 虽然语法上类似,但是省去了自己写各种判断逻辑。
参考
- https://sohlich.github.io/post/go_makefile/
- https://github.com/gin-gonic/gin/blob/master/Makefile
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式