14 | 项目管理:如何编写高质量的Makefile?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何编写高质量的Makefile,以提高项目管理效率。作者指出了低质量Makefile存在的问题,并提出了四个方法来实现高质量Makefile的编写:熟练掌握Makefile语法、规划Makefile要实现的功能、设计合理的Makefile结构以及掌握Makefile编写技巧。文章重点介绍了熟练掌握Makefile语法的重要性,以及规划Makefile要实现的功能,包括格式化代码、静态代码检查、单元测试、代码构建、文件清理等。此外,文章还强调了设计合理的Makefile结构的重要性,建议采用分层的设计方法,并在根目录下的Makefile聚合所有的Makefile命令。最后,文章提到了掌握Makefile编写技巧的必要性,包括使用`.PHONY`标识定义伪目标等。通过这些方法,读者可以更好地编写高质量的Makefile,提高项目管理效率。 此外,文章还介绍了八个技巧,包括善用通配符和自动变量、善用函数、依赖需要用到的工具、将常用功能放在/Makefile中、编写可扩展的Makefile、将所有输出存放在一个目录下、使用带层级的命名方式以及做好目标拆分。这些技巧可以帮助读者更好地理解如何编写高质量的Makefile,并提高项目管理效率。
《Go 语言项目开发实战》,新⼈⾸单¥68
全部留言(27)
- 最新
- 精选
- helloworld格式化代码、静态代码检查,这种ide或vim都会配置保存时格式化和代码检查,还有必要写在makefile中吗
作者回复: ide/vim不会进行静态代码检查。 ide/vim的格式化是可配的。而且ide/vim的格式化更多的是用了gofmt -w这种格式化。 这里将格式化代码放在Makefile有个选择: 1. 更丰富,可配置的格式化代码功能,比如:支持golines、goimport、gofmt后面还可以根据需要增加更多 2. 确保每一个开发者用的都是同一种格式化方法(ide/vim的格式化不一定每一个开发者都会陪,更不一定配置的格式化选项是一致的) 将格式化放在Makefile中,可以确保某个动作一定会被执行,并且执行的效果是一致的。
2021-06-26415 - yandongxiao总结:Makefile 是高效项目管理的重要工具,编写高质量的 Makefile,方便你做CI的检查,不至于自己的代码提交上以后,被提示各种不通过(静态代码检查、格式错误、单元测试等)。 要做好 Makefile 的管理,可按照下面的步骤:1. 学习 Makefile 语法;2. 规划 Makefile 要实现的功能;3. 规划 Makefile 结构;4. 善用 Makefile 技巧。 直接拷贝IAM项目的Makefile,也很香。
作者回复: 直接copy可能更香
2021-11-2624 - Vackine写好一个功能齐全的项目的makefile,然后只对makefile 的各个功能做编排,是不是就可以做到基本的持续发布了?
作者回复: 持续发布需要CI/CD系统的支持。 写好Makefile只能说方便CI系统直接调用。离CI/C差的还远
2021-06-264 - 青苔入镜我有些困惑,iam项目将控制流和数据流放在了一个仓库中,然后使用makefile进行管理,方便我们学习部署,这个我倒是可以理解。 实际企业中是将所有组件也放在一个大仓库中的吗?我所在公司是将项目各个组件分为各个小仓库,开发后进行持续交付和持续部署。我感觉这样也比较合理一些啊,适合现在微服务这样,单个人就维护几个组件。而且控制面和数据面如果部署在一台机器上不会影响数据面的性能吗? 什么场景需要用makefile来管理项目呢?私有化部署的项目吗?我没有想的太明白
作者回复: 一个应用下面一般分多个微服务,我感觉放在一个Git仓库中好些。 放在一个Git仓库中,但编译出来的是几个二进制文件,所以部署还是独立的。 放在一个仓库中有以下几个优势: 1. 可以统一管理,比如静态代码检查,只需要维护一套就可以了,不用重复开发。 2. 便于阅读,不用去不同代码仓库中不断跳转。 3. 便于包共享,放在同一个仓库中,开发者能够更轻松的发现共享包,并且潜意识中,会去使用公用的包。 最大的优点是:编译统一维护管理,不用每个仓库都实现一套维护方法。 我觉得只要是项目都可以使用makefile管理。
2022-11-08归属地:广东2 - 兔嘟嘟请问老师如何看待Makefile已过时的言论? 在知乎上查找相关资料时,发现很多人认为Makefile过时了,只需要学习cmake、bazel之类的,各种说法都有,现在有点晕
作者回复: 我感觉Makefile没过时,kubernetes等大型项目都是用的Makefile。 Makefile功能强大,应对超大型的项目都没问题,对于一般的项目更不是瓶颈了。
2021-10-2621 - Daiver老师,看到iam项目下面的license 文件中添加了其他库的说明,这个是手动加上去的吗
作者回复: 也是自动生成的,iam中很多都是通过工具来搞的
2021-09-2321 - tiny🌾make lint执行完为什么会报这个错误 make[1]: *** [go.lint] Error 1 make: *** [lint] Error 2
作者回复: 可以加老师微信再帮你看下哈,这个报错看不出来什么错误
2022-10-30归属地:广东 - tiny🌾运行make lint报错 ,这个怎么排查 make[1]: *** [go.lint] Error 1 make: *** [lint] Error 2
作者回复: 加老师微信,现场帮你定位下哈
2022-10-20归属地:广东 - 左耳朵东.PHONY: format format: tools.verify.golines .PHONY: tools.verify.% tools.verify.%: @if ! which $* &>/dev/null; then $(MAKE) tools.install.$*; fi 这里的 $* 是指 ‘golines’ 还是 ‘tools.verify.golines’ 呢?
作者回复: tools.verify.golines
2022-08-23归属地:广东2 - Calvin对 Windows 系统不友好,实际 CRUD 业务中,更多人是在 Windows 下开发吧(IDE 选 VSCode 或 GoLand)。
作者回复: 还有些在Mac上开发。 这个教程没必要在Mac、Windows平台下都适配一份。 之所以选择Linux是因为以下原因: 1. 因为Windows、Mac、Linux都有开发者,但该教程只能选择一个平台,所以选择了Linux 2. 将来部署服务是在Linux上部署的,在学习时,在Linux上完成开发部署,也是学习Linux的一个途径,为将来工作中, 在Linux下操作打下基础
2022-04-18