《跟我一起写Makefile》读书笔记(1)
以下内容源于陈皓所写《跟我一起写Makefile》的学习和整理,如有侵权,请告知删除。
一、概述
(1)makefile的作用,类似于windows中的IDE工具的功能;
(2)makefile 关系到整个工程的编译规则
- 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。
- 甚至于进行更复杂的功能操作,因为makefile 就像一个 Shell 脚本一样,其中也可以执行操作系统的命令。
- 一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
二、关于程序的编译和连接
- 在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成 Object File。
- 一般来说,每个源文件都应该对应于一个中间目标文件(O 文件或是 OBJ 文件)。
- 链接时,主要是链接函数和全局变量 。
- 由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在 Windows 下这种包叫“库文件”(Library File),也就是 .lib 文件,在 UNIX下,是 Archive File,也就是 .a 文件。
- 链接器所得到.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的规则
(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)相关推荐
- 《Cloud Native Data Center Network》读书笔记-1
<Cloud Native Data Center Network>读书笔记-1 2019年的一本书,云原生数据中心网络入门书籍,作者 Dinesh G. Dutt 是一家网络公司的首席科 ...
- 《Cloud Native Data Center Network》读书笔记-7
第九章 数据中心边缘 9.1 问题 Clos与外部的连接 为什么需要进行外部连接? 连接到外部世界的带宽需求是什么? 数据中心网络将连接到什么上游设备? 穿越内外部世界的交通需要哪些服务? 9.2 连 ...
- 论文阅读——译文: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 ...
- Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读
Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读 title: 一种可扩展的.商品化的数据中心网络体系结构 第一部分 ...
- 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销
<Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...
- 《Advanced Data Structures》读书笔记
1.基础数据结构 1.1.栈 1.2.队列 1.3 双端队列 1.4.动态分配节点 1.5.数组类的"阴影拷贝" 2.搜索树 3.平衡搜索树 4.区间集合 5.堆 6.并查集 7. ...
- 最新发布| Jira官宣中国区本地部署特殊政策,公布Data Center价格
Atlassian官方发布Jira Server版停售消息至今已3个月,面对中国区用户的抗议,官方终于于2021年2月2日推出针对性政策,即将DC版准入门槛从500人下调至25人,并于2月5日召开发 ...
- 《Python神经网络编程(Make Your Own Neural Network)》读书笔记
声明 这是作者在CSDN上的第二篇博客,关于阅读塔里克·拉希德的著作<Python神经网络编程(Make Your Own Neural Network)>之后的读书笔记.跟诸位大牛相比, ...
- Analyzing Neural Time Series Data 读书笔记6
Analyzing Neural Time Series Data 第六章读书笔记 仅做学习记录 6 Practicalities of EEG Measurement and Experiment ...
- Analyzing Neural Time Series Data 读书笔记3
Analyzing Neural Time Series Data 第三章读书笔记 仅做学习记录 3 Interpreting and Asking Questions about Time-Freq ...
最新文章
- 10 张图打开 CPU 缓存一致性的大门
- android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...
- java knn分类_返回2个或更多最近邻居的KNN算法
- 如何将谷歌浏览器的背景色(包括显示的网站界面等)全部调为黑色?2020.12.28
- 收藏 | 那些机器学习必备知识
- 知名互联网公司系统架构图[第1期]
- 机器学习—XGboost的原理、工程实现与优缺点
- 虚函数 动态绑定 实现方式是:虚函数表
- 每日一算法:杨辉三角形
- .ico 图标下载网站推荐
- 全球AI泰斗Stuart Rusell:研究人工智能太诱人了,不可抗拒
- Mac配置Qt环境和把应用打包成dmg文件
- Matlab如何绘制小提琴图?
- ORA-01012: not logged on处理
- MATLAB 之 优劣解距离法(TOPSIS )
- mysql 一小时内数据
- 减字 浣溪沙-听歌有感 (清)况周颐
- python 检测文件编码_[常用] 在Python中检测网页编码
- 使用cocos2dx+lua改造《剑魂之刃》的经验总结
- vtk相机_VTK 相机类vtkCamera原理及用法
热门文章
- AFNetworking网络请求与图片上传工具(POST)
- 操作系统--进程状态切换以及cpu调度(转)
- python解约瑟夫环问题
- 创建 WPF 不规则窗口
- [转]MPlayer快捷键参数设置--系统开销最少的影音播放器
- python 利用pexpect进行多机远程命令执行
- 异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁
- Simulated Annealing(模拟退火算法)
- iphone上如何绘制饼图(使用CGContextAddArc)(原创)
- ORA-12514: TNS:监听程序当前无法识别连接描述符中请(转)