缘起

  最近,本人在移植 U-Boot 时,需要查看及修改 U-Boot 的 Makefile。由于之前对于 Makefile 可以说是一知半解,之前学的那点东西基本也消耗的差不多了,对于 U-Boot 源码中这种复杂的 Makefile 看起来是相当费力,于是在网上找到了《跟我一起写Makefile》这篇文章来系统的复习一下。

  《跟我一起写Makefile》是前辈 陈皓 发表在其 CSDN 博客 上的系列文章。对于 Makefile 的讲解很透彻,并结合了一些示例。为了避免眼高手低,同时也为了后续查阅方便,现通过将其转载并整理到 Github 的方式来学习一下(顺便使用 Github 实现在线文档托管)。

  作者的原文中没有代码高亮,排版也不是很规则,文中的示例也没有提供代码,为了加深学习印象,我会提供完整的示例代码,并在原文中会添加了一些内容、图示等等。因此,本文与作者的原文稍有差异,但主体内容没有变化!我这里主要的更改有:

  1. 增加示例代码(examples/* 目录下),用于验证文中的示例。我使用的环境是 Ubuntu 20.04.3,默认的 make 版本是 GNU Make 4.2.1 Built for x86_64-pc-linux-gnu。
  2. 在文中增加一些图片辅助理解,同时对于原内容中的错误进行了更正。
  3. Makefile 需要由 make 程序来解释执行。我个人认为,在讲解 Makefile 之前,有必要先告诉大家 make 程序的一些工作方式。了解了 make 的工作机制对于理解 Makefile 有一定的帮助。下图是一个 make 工作示意图:

    因此,我把作者的 make 的运行 章节的内容提到前面来,此外,对于原文中部分章节中关于 make 讲解的内容也提前到这个章节中。在 make 的运行 这一章节,我们不需要理解 Makefile 的内容,只需要关于 make 的工作机制即可。
  4. 在作者原文后面,我又补充了一些作者没有讲出的内容,具体见目录中 进阶 章节中的各子章节内容。
  5. 全文均为 Markdown 格式,方便大家查看及修改。在整理时部分内容稍微调整了文章的排版,以使其在 Markdown 下更美观。

  在整理的时候,发现已经有网友做个这个工作了:https://github.com/seisman/how-to-write-makefile ,但是他这个使用的是 reStructuredText(扩展名 .rst)格式的文件,不是目前较为流行的 Markdown 格式(扩展名 .md)。而且这两种格式的语法差的也比较多,我这里再整理一个 Markdown 格式的!

相关内容

  1. 前辈 陈皓 的 CSDN 博客地址:https://blog.csdn.net/haoel/article/details/2886 。本文中的内容版权归 陈皓 所有,作者要求转载注明作者及出处。

  2. 项目主页: https://github.com/ZCShou/Makefile

  3. 网页在线版: https://zcshou.github.io/Makefile/

  4. 英文比较好的也可以直接去看这个官方手册:GNU Make Manual

关于本文档

  1. 本文档系统使用开源文档网站生成器 docsify 搭建,文档格式均为 Markdown 格式。
  2. 文档中的绝大多数图示(部分截图除外)均使用开源软件 draw.io 绘制,并导出为 .PNG。所有图示的源码文件为 ./content/images/Makefile.drawio(可使用 draw.io 打开即可)。

Linux 之十二 Makefile 从入门到放弃全解相关推荐

  1. 从零开始的linux 第十二章

    从零开始的linux 第十二章 (敲门声)咚咚咚... 路人甲:"小..小编大人在家吗?" (睡意朦胧的小编去开门):唉??路...路人甲!? (↑看到小编后的路人甲):" ...

  2. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

  3. 花书+吴恩达深度学习(十二)卷积神经网络 CNN 之全连接层

    目录 0. 前言 1. 全连接层(fully connected layer) 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN ...

  4. 【Unity3D-UGUI系列】(十二)ScrollView 滚动视图组件详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  5. pythonfor三角函数_Python入门之三角函数全解【收藏】

    Python中的三角函数位于math模块内. 引入模块: import math 输出pi: import math print(math.pi) 得:3.141592653589793 math模块 ...

  6. 面渣逆袭:计算机网络六十二问,三万字图文详解!速收藏!

    这次给大家带来了计算机网络六十二问,三万字,七十图详解,大概是全网最全的网络面试题. 基础 1.说下计算机网络体系结构 计算机网络体系结构,一般有三种:OSI 七层模型.TCP/IP 四层模型.五层结 ...

  7. 2013年计算机专业对口模拟试题二,计算机对口升学模拟试题全解.doc

    计算机对口升学模拟试题全解 2013年计算机专业对口高考模拟试题二 一.选择题 1.计算机硬件系统由( )组成 A.CPU和内存 B.控制器和运算器 C.主机和外设 D.CPU.内存和外存 2.下列叙 ...

  8. Linux(十二)中断系统

    STM32 的中断系统主要有以下几个关键点: ①. 中断向量表. ②. NVIC(内嵌向量中断控制器). ③. 中断使能. ④. 中断服务函数. 中断向量表 中段向量表就是说明都有什么中断,这些中断服 ...

  9. 十二章 Python入门系列之字典

    系列文章目录 第一章 Python入门系列之介绍 第二章 Python入门系列之PyCharm 第三章 Python入门系列之注释 第四章 Python入门系列之变量 第五章 Python入门系列之输 ...

最新文章

  1. Vim - 编辑多个文件
  2. java数据结构排序实验报告_java数据结构与算法之插入排序详解
  3. linux笔记2.20
  4. iOS Application Security
  5. Python面试必须要看的15个问题
  6. Python map 函数 - Python零基础入门教程
  7. PHP函数调用及循环体内定义大型变量效率的研究
  8. python itemgetter_Python operator.itemgetter
  9. URL编码分析与乱码解决方案
  10. 系统分析师考试经验分享
  11. 计算机的论文初稿要交什么,论文初稿
  12. ps里面怎么插入流程图_教你如何正确画工艺流程图
  13. 一个很实用的造数工具—Spawner Data Generator
  14. 设置计算机网络密码怎么设置路由器,如何在计算机上设置路由器密码?
  15. project2016调配资源冲突
  16. html控制两个页面转换,html页面切换过度效果实现方案_蓝戒的博客
  17. SharpDevelop的AddInTree View 插件
  18. python 因子分析 权重计算方法_因子得分如何计算_spss如何计算因子得分
  19. 你要记得那些大雨中为你撑伞的人,帮你挡住外来之物的人。。。——村上春树 2021.11.13日 早上11点
  20. Netty 编解码器详解

热门文章

  1. 腾讯面试后续 | 掘金技术征文
  2. springboot与thymeleaf 整合
  3. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”...
  4. 在linux下玩转usb摄像头
  5. Java自动装箱后的值比较
  6. 读《UNIX编程艺术》随记
  7. django-vue-admin前端设置后台接口地址为127.0.0.1产生跨域问题解决办法
  8. django3.2.8配置使用mysql
  9. vscode linux版下载地址
  10. mapreduce运行模式