Makefile

什么是Makefile

  • 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile 文件就像一个 Shell 脚本一样, 也可以执行操作系统的命令。
  • Makefile 带来的好处就是"自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释Makefile 文件中指令的命令工具,一般来说大多数的 IDE 都有这个命令,比如Delphi 的make,Visual C++的nmake,Linux下GNU的make。

Makefile文件命名和规则

在这里插入图片描述

实践:以之前的例子进行实践

在这里插入图片描述
里面包含一个头文件,一个main函数,四个其他源文件

接下来开始书写Makefile

新建一个Makefile文件

app是我们的目标
xxx.c是我们程序的依赖
换行,然后table缩进一下,书写命令
最后保存退出
在这里插入图片描述
make一下,然后发现app已经可以生成出来
然后运行一下发现可以成功运行
在这里插入图片描述

Makefile工作原理

  • 命令在执行之前,需要先检查规则中的依赖是否存在
    • 如果存在,执行命令
    • 如果不存在,向下检查其它的规则,检查有没有一个规则是用来生成这个依赖的,如果找到了,则执行该规则中的命令
  • 检测更新,在执行规则中的命令时,会比较目标和依赖文件的时间
    • 如果依赖的时间比目标的时间晚,需要重新生成目标
    • 如果依赖的时间比目标的时间早,目标不需要更新,对应规则中的命令不需要被执行

第一步gcc sub.o add.o mult.o div.o main.o -o app首先将xxx.o编译成app
但是没有xxx.o文件
因此第二步就是继续往下寻找看看有没有生成xxx.o文件,往下看发现gcc -c sub.c -o sub.o命令是生成相应依赖,则第一步先执行这些命令,生成上面所需要的xxx.o文件
最后执行最上面的命令gcc sub.o add.o mult.o div.o main.o -o app
整个流程大概就是这样

注:Makefile里面的所有命令都是为了第一条命令服务的,如果第一条命令并没有使用到xxx.o,则后面的代码不会执行(如果想要执行,需要手动指定目标)
在这里插入图片描述

对检测更新的理解
我们对main.c更改里面的代码,
再make一下,我们可以发现,gcc只对mian.c进行了更改,其他的东西并没有更改,然后链接成app
在这里插入图片描述
由此我们可以发现下面这个命令并没有上面将命令分开写效率高,
将命令分开,修改某一部分的时候,gcc仅编译修改的部分,
而下面这个命令会编译所有的文件
在这里插入图片描述

Makefile改进

上面所述两种方式第一种简单,但是效率不高
第二种稍微麻烦,但是效率高

变量

在这里插入图片描述

实践
在这里插入图片描述

模式匹配

在这里插入图片描述
实践,这样只需要写一个就可以将上面的文件全部转换成.o文件
(如果有.o文件不会执行下面的语句,没有的话才会执行)
在这里插入图片描述

函数

在这里插入图片描述

分隔符

在这里插入图片描述
实践
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值