Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

特别放送 | 给你一份Go项目中最常用的Makefile核心语法

引入其他Makefile
Makefile语法概览
Makefile规则介绍
总结

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。今天,我们更新一期特别放送作为“加餐”,希望日常催更的朋友们食用愉快。
在第 14 讲我强调了熟练掌握 Makefile 语法的重要性,还推荐你去学习陈皓老师编写的《跟我一起写 Makefile》 (PDF 重制版)。也许你已经点开了链接,看到那么多 Makefile 语法,是不是有点被“劝退”的感觉?
其实在我看来,虽然 Makefile 有很多语法,但不是所有的语法都需要你熟练掌握,有些语法在 Go 项目中是很少用到的。要编写一个高质量的 Makefile,首先应该掌握一些核心的、最常用的语法知识。这一讲我就来具体介绍下 Go 项目中常用的 Makefile 语法和规则,帮助你快速打好最重要的基础。
Makefile 文件由三个部分组成,分别是 Makefile 规则、Makefile 语法和 Makefile 命令(这些命令可以是 Linux 命令,也可以是可执行的脚本文件)。在这一讲里,我会介绍下 Makefile 规则和 Makefile 语法里的一些核心语法知识。在介绍这些语法知识之前,我们先来看下如何使用 Makefile 脚本。

Makefile 的使用方法

在实际使用过程中,我们一般是先编写一个 Makefile 文件,指定整个项目的编译规则,然后通过 Linux make 命令来解析该 Makefile 文件,实现项目编译、管理的自动化。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了在Go项目中最常用的Makefile核心语法,包括规则语法、伪目标和order-only依赖。通过清晰的示例和详细的解释,帮助读者快速了解了Makefile的核心语法和规则,为他们在Go项目中编写高质量的Makefile提供了指导和帮助。文章还涵盖了变量赋值方法、多行变量、环境变量、特殊变量和自动化变量的使用,以及条件语句和函数的应用。通过对自定义函数和预定义函数的讲解,读者可以了解如何定义和调用函数,以及如何利用预定义函数实现强大的功能。总的来说,本文内容丰富,适合想要深入了解Makefile核心语法的读者阅读。文章还介绍了Makefile的一些特性,如引入其他Makefile,为读者提供了更全面的知识。通过本文的总结,读者可以快速了解Makefile的核心语法和规则,为他们在Go项目中编写高质量的Makefile提供了指导和帮助。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • helloworld
    我觉得变量用${}, 函数用$(),这样能很好区分,对熟悉shell的人也更友好

    作者回复: 听起来没毛病,保持一致即可

    2021-06-28
    2
    16
  • pedro
    周一就更新,值😂

    编辑回复: 这篇是额外的加餐,不占排期哦

    2021-06-28
    7
  • haha
    有学员群吗?可以加入下吗?方便交流和提升,谢谢。

    作者回复: 可以看下iam仓库根目录下的README文档,最后有微信号

    2021-07-16
    2
  • Tiandh
    老师,这两句话不理解 因为伪目标不是文件,make 无法生成它的依赖关系,也无法决定是否要执行它。 因为伪目标总是会被执行,所以其依赖总是会被决议。

    作者回复: 就是伪目标总是会被执行

    2021-06-28
    4
    2
  • lesserror
    大家有什么不懂的,可以结合:陈皓老师编写的《跟我一起写 Makefile》 (PDF 重制版) 来看,本文受限于篇幅,有些概念可能不能花很大的篇幅去讲解。

    作者回复: 陈皓老师编写的这份Makefile指南很详尽

    2021-09-29
    1
  • Fan
    多行变量 的例子没明白 define USAGE_OPTIONS Options: DEBUG Whether to generate debug symbols. Default is 0. BINS The binaries to build. Default is all of cmd. ... V Set to 1 enable verbose build. Default is 0. endef

    作者回复: USAGE_OPTIONS的值可以是多行字符串

    2021-08-11
    3
    1
  • Jone_乔泓恺
    老师,有问格式问题想问下:ifeq 语句中的内容建议要用 tab,还是顶格呢?

    作者回复: 用tab好些

    2022-07-01归属地:广东
  • Jone_乔泓恺
    ifeq ($(origin ROOT_DIR),undefined) ROOT_DIR := $(abspath $(shell cd $(COMMON_SELF_DIR)/../.. && pwd -P)) endif 和 ROOT_DIR ?= $(abspath $(shell cd $(COMMON_SELF_DIR)/../.. && pwd -P)) 请问:这两种方式的效果是否相同?

    作者回复: 是一样的

    2022-06-30归属地:广东
  • haha
    由于缺少云上开发资源,本地虚拟机的环境配置能否给些建议,可以创建一个群方便交流吗?

    作者回复: 可以看下IAM项目根目录下的README文档,有微信号

    2021-07-16
    2
  • Realm
    老师,函数dir ,nodir注释好像有笔误.

    作者回复: 没找到你说的哪个位置,可以再明确下位置吗,thanks

    2021-07-10
    3
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部