以下内容源于陈皓所写《跟我一起写Makefile》的学习和整理,如有侵权,请告知删除。

一、概述

(1)makefile的作用,类似于windows中的IDE工具的功能;

(2)makefile 关系到整个工程的编译规则

  • 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。
  • 甚至于进行更复杂的功能操作,因为makefile 就像一个 Shell 脚本一样,其中也可以执行操作系统的命令。
(3)makefile 带来的好处就是——“自动化编译”
  • 一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

二、关于程序的编译和连接

(1)源文件经过编译器的编译,生成中间目标文件(.o文件,即Object File)
  • 在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成 Object File。
(2)中间目标文件经过链接器的链接,生成执行文件(.elf文件)
  • 一般来说,每个源文件都应该对应于一个中间目标文件(O 文件或是 OBJ 文件)。
  • 链接时,主要是链接函数和全局变量 。
  • 由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在 Windows 下这种包叫“库文件”(Library File),也就是 .lib 文件,在 UNIX下,是 Archive File,也就是 .a 文件。
附加说明:
(3)由.elf文件得到可以烧写的镜像文件
  • 链接器所得到.elf文件是可执行程序(在操作系统下,此.el文件可以执行);
  • 但在嵌入式裸机中,我们需要的是可以烧写的文件(可烧写的文件就叫镜像image);
  • 因此我们需要用这个.elf为原材料来制作镜像,制作工具是交叉编译工具链中的arm-linux-objcopy

(4)由.elf文件反汇编得到汇编程序,见博客点击打开链接

  • 使用arm-linux-objdump工具进行反编译(反汇编);
  • 把编译后的.elf格式的可执行程序反编译,得到它的汇编源代码。
  • 我们使用反汇编主要是用来学习。

(4)Makefile文件中把编译和链接的过程分开。

  • 用gcc a.c -o exe这种方式来编译时,形式上把编译和链接过程一步完成了。
  • 但是在内部实际上编译和链接永远是分开独立进行的,编译要使用编译器gcc,链接要使用链接器ld。

三、Makefile的介绍

1、makefile的规则

target ... : prerequisites ...
command

(1)如果prerequisites中有一个以上的文件比 target 文件要新的话,command 所定义的命令就会被执行。这就是 Makefile 的规则。也就是 Makefile 中最核心的内容。

(2)命令前一定要以一个 Tab 键作为开头。

(3)“目标:”后面如果没有依赖

  • 那么,make 就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。
  • 要执行其后的命令,就要在 make 命令后明显得指出这个lable 的名字。
  • 这样的方法非常有用,我们可以在一个 makefile 中定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份,等等。

2、makefile是如何工作的?

  • make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  • 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make 就会直接退出,并报错;
  • 对于所定义的命令的错误,或是编译不成功,make 根本不理。

3、makefile中使用变量

这类似于shell中定义变量,然后使用$来引用

4、makefile的自动推导

.PHONY修饰clean,表示clean是一个伪目标

5、清空目标文件的规则

如上,每个Makefile中都应该写一个清空目标文件(.o 和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁

《跟我一起写Makefile》读书笔记(1)相关推荐

  1. 《Cloud Native Data Center Network》读书笔记-1

    <Cloud Native Data Center Network>读书笔记-1 2019年的一本书,云原生数据中心网络入门书籍,作者 Dinesh G. Dutt 是一家网络公司的首席科 ...

  2. 《Cloud Native Data Center Network》读书笔记-7

    第九章 数据中心边缘 9.1 问题 Clos与外部的连接 为什么需要进行外部连接? 连接到外部世界的带宽需求是什么? 数据中心网络将连接到什么上游设备? 穿越内外部世界的交通需要哪些服务? 9.2 连 ...

  3. 论文阅读——译文:PortLand:A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric

    论文标题:PortLand:A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric 会议:sigcom 09 Ref:Radhika ...

  4. Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读

    Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读 title: 一种可扩展的.商品化的数据中心网络体系结构 第一部分 ...

  5. 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销

    <Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...

  6. 《Advanced Data Structures》读书笔记

    1.基础数据结构 1.1.栈 1.2.队列 1.3 双端队列 1.4.动态分配节点 1.5.数组类的"阴影拷贝" 2.搜索树 3.平衡搜索树 4.区间集合 5.堆 6.并查集 7. ...

  7. 最新发布| Jira官宣中国区本地部署特殊政策,公布Data Center价格

    ​Atlassian官方发布Jira Server版停售消息至今已3个月,面对中国区用户的抗议,官方终于于2021年2月2日推出针对性政策,即将DC版准入门槛从500人下调至25人,并于2月5日召开发 ...

  8. 《Python神经网络编程(Make Your Own Neural Network)》读书笔记

    声明 这是作者在CSDN上的第二篇博客,关于阅读塔里克·拉希德的著作<Python神经网络编程(Make Your Own Neural Network)>之后的读书笔记.跟诸位大牛相比, ...

  9. Analyzing Neural Time Series Data 读书笔记6

    Analyzing Neural Time Series Data 第六章读书笔记 仅做学习记录 6 Practicalities of EEG Measurement and Experiment ...

  10. Analyzing Neural Time Series Data 读书笔记3

    Analyzing Neural Time Series Data 第三章读书笔记 仅做学习记录 3 Interpreting and Asking Questions about Time-Freq ...

最新文章

  1. 10 张图打开 CPU 缓存一致性的大门
  2. android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...
  3. java knn分类_返回2个或更多最近邻居的KNN算法
  4. 如何将谷歌浏览器的背景色(包括显示的网站界面等)全部调为黑色?2020.12.28
  5. 收藏 | 那些机器学习必备知识
  6. 知名互联网公司系统架构图[第1期]
  7. 机器学习—XGboost的原理、工程实现与优缺点
  8. 虚函数 动态绑定 实现方式是:虚函数表
  9. 每日一算法:杨辉三角形
  10. .ico 图标下载网站推荐
  11. 全球AI泰斗Stuart Rusell:研究人工智能太诱人了,不可抗拒
  12. Mac配置Qt环境和把应用打包成dmg文件
  13. Matlab如何绘制小提琴图?
  14. ORA-01012: not logged on处理
  15. MATLAB 之 优劣解距离法(TOPSIS )
  16. mysql 一小时内数据
  17. 减字 浣溪沙-听歌有感 (清)况周颐
  18. python 检测文件编码_[常用] 在Python中检测网页编码
  19. 使用cocos2dx+lua改造《剑魂之刃》的经验总结
  20. vtk相机_VTK 相机类vtkCamera原理及用法

热门文章

  1. AFNetworking网络请求与图片上传工具(POST)
  2. 操作系统--进程状态切换以及cpu调度(转)
  3. python解约瑟夫环问题
  4. 创建 WPF 不规则窗口
  5. [转]MPlayer快捷键参数设置--系统开销最少的影音播放器
  6. python 利用pexpect进行多机远程命令执行
  7. 异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁
  8. Simulated Annealing(模拟退火算法)
  9. iphone上如何绘制饼图(使用CGContextAddArc)(原创)
  10. ORA-12514: TNS:监听程序当前无法识别连接描述符中请(转)