【Linux入门到精通系列讲解】工具——make/Makefile
文章目录
- 1 make与Makefile的关系
- 2 Makefile里面放的是依赖关系和依赖方法
- 3 原理
一个工程中的源文件有很多,按照它们的模块,功能和类型,分别放在不同的目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。Makefile带来的好处就是自动化编译,一旦写好只需要一个make命令,就可以完成整个工程的自动编译。
1 make与Makefile的关系
make是一条命令工具,一个解释Makefile中指令的命令工具,Makefile是一个文件,两个搭配使用完成项目的自动化构建。
2 Makefile里面放的是依赖关系和依赖方法
提前创建一个hello.c文件
再创建Makefile文件
打开Makefile文件
hello: hello.o gcc test.o -o test 应该改为: hello: hello.o gcc hello.o -o hello
依赖关系:
以上图为例
生成hello文件依赖hello.o
生成hello.o文件依赖hello.s
生成hello.s文件依赖hello.i
生成hello.i文件依赖hello.c
冒号左侧叫做目标文件
冒号右侧叫做依赖文件列表(有多个依赖文件时,用空格分开)
依赖方法:
gcc hello.* -option hello.*
这里解释一下上图几条依赖方法的意思
预处理(进行宏替换):gcc -E hello.c -o hello.i
选项·-E:让gcc在预处理结束后停止编译过程
选项-o是指目标文件,i文件为已经预处理过的C原始程序
编译(生成汇编):gcc -S hello.i -o hello.s
选项-S查看代码是否规范无误
汇编(生成机器可识别的代码):gcc -c hello.s -o hello.o
汇编阶段将编译阶段生成的.s文件转换成目标文件
选项-c可以看到汇编代码已经转换成.o的二进制目标代码
连接(生成可执行文件或库文件):gcc hello.o -o hello
成功编译后,进入了链接阶段
3 原理
当我们输入make命令之后:
make会在当前目录下查找名叫Makefil或者makefile的文件
如果找到,它会在找到文件中的第一个目标文件,比如在上面的例子中它会找到hello这个文件,并把这个文件作为最终目标文件。
如果hello不存在,或者hello所依赖的后面的hello.o文件的文件修改时间比hello这个文件新,那么它就会执行后面定义的命令来生成这个文件。
如果hello所依赖的文件hello.o不存在,那么make会在当前文件中找目标文件为hello.o文件的依赖性,如果找到再根据那一个规则生成hello.o文件。
这里C文件和H文件都存在,于是make会生成hello.o文件,然后再用hello.o文件声明make的终极目标,即执行hello文件。
(这就是整个make的依赖性,make会一层一层的去找文件的依赖关系,直到最后编译出第一个目标文件,在找寻过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会推出,并报错。对于定义的命令错误,或者比阿尼不成功,make是不管的。make就只管文件的依赖性,即如果找在找了依赖关系之后,冒号后面的文件还是不在,那么make就不工作了。)
【Linux入门到精通系列讲解】工具——make/Makefile相关推荐
- 【Linux入门到精通系列讲解】VFS分区动态绑定和CentOS7分区类型
文章目录 1 VFS分区动态绑定 2 CentOS7分区类型 1 VFS分区动态绑定 VFS和ext2文件系统都使用超级块和索引节点来描述和管理系统中的文件,每个安装的文件系统都有一个VFS超级块. ...
- 【Linux入门到精通系列讲解】一些基础问题
文章目录 1 简述 Linux 的四个主要的应用方面(要求有详细说明) 2 简述 Linux 系统中普通用户执行 root 用户权限命令的方式,并分别给出需满足的条件和操作实例. 3 简述 Linux ...
- 【Linux入门到精通系列讲解】.bashrc 文件作用
Linux 系统中很多 shell,包括bash,sh,zsh,dash 和 korn 等,不管哪种 shell 都会有一个 .bashrc 的隐藏文件,它就相当于 shell 的配置文件. 一般会有 ...
- 【Linux入门到精通系列讲解】Centos 7软件安装的三种方式
centos 软件安装的三种方式 Linux下面安装软件的常见方法: 一.yum 替你下载软件 替你安装 替你解决依赖关系 点外卖 缺少的东西 外卖解决 1.方便 简单 2.没有办法深入修改 yum ...
- 【Linux入门到精通系列讲解】Linux如何创建和删除swap分区
Linux中的swap分区类似Windows的虚拟内存,在硬盘空间不足的情况下,可通过创建swap分区来解决,下面小编就给大家介绍下Linux如何创建和删除swap分区. 文章目录 1 swap概述 ...
- 【Linux入门到精通系列讲解】Ubuntu下使用gcc编译并运行C程序
文章目录 1 hello 2 命令 3 linux下gcc编译多个源文件 1 hello 2 命令 在终端输入 Ubuntu命令 $ gcc hello.c -o hello $ ./hello == ...
- 【Linux入门到精通系列讲解】shell中的eval命令
eval命令用法: 当我们在命令行前加上eval时,shell就会在执行命令之前扫描它两次.eval命令将首先会先扫描命令行进行所有的置换,然后再执行该命令.该命令适用于那些一次扫描无法实现其功能的变 ...
- 【Linux入门到精通系列讲解】系统调用和库函数路径
cpp -v查看
- 【Linux入门到精通系列讲解】内存管理malloc和free函数
函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). 关于分配失败的原 ...
最新文章
- 最长公共子序列问题 (LCS)
- HTML5主要新增标签
- 前端开发注意事项(HTML与CSS进阶)
- 黔东南天气预报软件测试,黔东南天气预报15天
- openstack havana vlan安装成功
- 第十一节课 课堂总结
- Android性能优化——界面流畅度优化
- Bytom国密网说明和指南
- BZOJ 1211: [HNOI2004]树的计数 purfer序列
- [JavaScript]Call和Apply方法
- Apache SeaTunnel(Incubating) 2.2.0-beta 版本发布!API 重构,连接器与引擎解偶
- CORS请求的简单请求和非简单请求
- DVD管理系统修改版
- iOS 通过github自动打包ipa
- wpsppt插入html,WPS的做好的一个PPT 怎么插入到另一个PPT?
- 数据结构:静动图结合,活灵活现 讲解—— 堆排序, 直接选择排序
- 对脏写、脏读、不可重复度、幻读的理解笔记
- 大学物理第一章笔记——高等农林院校基础课程教程系列
- c语言贪心算法零钱问题,贪心算法(2)——找零钱问题
- ActiveSync 3.7