什么是makefile

1.什么是Makefile

在之前学习C程序的编译过程中,我们知道编译一个程序还比较简单, 如果要编译多个文件,或者不同文件夹中的文件,需要生成不同的库文件,以及确定这些文件的编译先后顺序,往往所需要的命令行特别多,而且比较复杂,甚至对于以后项目的维护也比较麻烦。

那么这个时候如果我们能够把所有的编译规则全部规范到文件中,然后通过解析该文件去执行对应的编译指令,这样就大大简化指令的复杂度,同时降低了编译程序过程中所带来的错误。

根据上面的需求就产生了Makefile,我们的编译和处理规则就放在Makefile文件中,通过Makefile工具解析Makefile文件中的命令来指导整个工程的编译过程

2.Makefile文件基本规则

在这里插入图片描述
上面的为大家展示了Makefile的核心规则,有点类似于一位厨师做菜,目标就是做一碗好菜,那么所谓的依赖就是各种食材、各种厨具等等,然而有了这些依赖还不够需要厨师有着非常好的厨艺才能做出一道好菜。
在这里插入图片描述
同时这些依赖也有可能此时此刻并不存在,需要现场制作,或者由其他厨师做好,那么这个依赖就成为了其他规则的目标,该目标也会有它自己的依赖和命令,这样形成一层一层递归依赖组成了Makefile文件。

在这里插入图片描述
总结:

  • Makefile并不会关心命令是如何执行的,仅仅只是会去执行所定义的命令,和我们平时直接输入命令行是一样的效果。
  • Makefile就相当于一个依赖关系文件,在执行该文件的以后会递归的查找依赖文件并执行对应的命令,最终生成第一个目标

3.简单使用Makefile

在这里插入图片描述
上图是makefile文件,最终为了生成Test文件,需要三个*.o文件,然后三个.o文件又分别依赖于对应的*.c文件,这样加上对应的gcc命令就构成了一个基本的makefile。

注意 : 2/4/6/8行均为tab键。
下面使用make命令来编译生成test目标文件
在这里插入图片描述
这样我们执行make命令一键就搞定了所有的编译任务,如果下次需要改变编译过程就直接修改对应的makefile文件中的规则即可

有类比过windows里面IDE环境中编译器使用的小伙伴都知道在windows里面的开发工具编译通过一键即可搞定所有编译内容。难道windows中的开发工具更强大一些?
其实不然,我们在windows中构建对应的工程文件的过程中通过图形界面就悄悄的把类似的makefile文件给生成了,那么当点击编译的时候就相当于在命令行里面执行make,其实都是类似的,仅仅只是我们平时使用windows更多一点,更加容易接受。

当然这里仅仅只是演示了一些最简单的操作,比较麻烦的还是命令部分可以使用到通配符和shell指令等等,这样会增加一定的复杂度,其实makefile本身并没有太大的难度

4.指定使用Makefile文件

一般把对应的makefile文件名命名为Makefile和makefile

如果平时在一个目录下存在多个makefile文件的时候,一般我们都会通过不同命名来进行区分,那么该如何指定对应的makefile文件进行识别解析呢 ?可以使用make -f选项,如下图所示:
在这里插入图片描述

5.变量的使用

在makefile中为了减少代码的重复,使用变量的概念来简化编写,如下面的makefile进行如下改造:

在这里插入图片描述
使用$(obj)来代替所有的目标文件,以后需要添加其他目标文件的话就只需要在变量obj处进行相应修改即可。
同时系统还存在其他默认的自动化变量,这样可以大大简化makefile文件,便于设计和后期维护,如:
$^ 表示所有的依赖文件
$@ 表示生成的目标文件
$< 代表第一个依赖文件
等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值