为 golang 项目添加 Makefile

文章目录

    使用 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式