Makefile讲解

为什么要使用Makefile

比如现在一个项目里有三个文件A.c,B.c,C.c你使用arm编译器编译为.o文件。在链接为一个总文件在执行。每个都执行一遍需要三次编译。但是你突然发现了你写的文件里有错误或有需要修改的地方。你就要删除掉刚才编译的文件。修改后再次编译三次。这样可能还能接受。但是一个工程里有几千个文件甚至是上万个文件,难道你也要重新编译几千几万次?因此我们需要Makefile。

Makefile语法

Makefile 规则格式
目标…… : 依赖文件集合……
命令 1
命令 2
……**

Makefile 里面是由一系列的规则组成的,这些规则格式如下:

比如下面这条规则:
main : main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
这条规则的目标是 main, main.o、 input.o 和 calcu.o 是生成 main 的依赖文件,如果要更新目标 main,就必须先更新它的所有依赖文件,如果依赖文件中的任何一个有更新,那么目标也必须更新,“更新”就是执行一遍规则中的命令列表。
命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

Makefile 变量

跟 C 语言一样 Makefile 也支持变量的,先看一下前面的例子:
main: main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
上述 Makefile 语句中, main.o input.o 和 calcue.o 这三个依赖文件,我们输入了两遍,我们这个 Makefile 比较小,如果 Makefile 复杂的时候这种重复输入的工作就会非常费时间,而且非常容易输错,为了解决这个问题, Makefile 加入了变量支持。不像 C 语言中的变量有 int、 char等各种类型, Makefile 中的变量都是字符串!类似 C 语言中的宏。使用变量将上面的代码修改,修改后:

1#Makefile 变量的使用
2 objects = main.o input.o calcu.o
3 main: $(objects)
4 gcc -o main $(objects)

1、赋值符“=”
借助另外一个变量,可以将变量的真实
值推到后面去定义。也就是变量的真实值取决于它所引用的变量的最后一次有效值。


2、赋值符“:=”
赋值后变量的值固定不会改变。


3、赋值符“?=”
如果变量前面没有被赋值,那么此变量就是现在定义的值如果前面已经赋过值了,那么就使用前面赋的值。


4、变量追加“+=”
有时候我们需要给前面已经定义好的变量添加一些字符串进
去,此时就要使用到符号“+=”

Makefile 模式规则

模式规则中,至少在规则的目标定定义中要包涵“%”,否则就是一般规则,目标中的“%”
表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c 结尾的
文件,类似与通配符, a.%.c 就表示以 a.开头,以.c 结束的所有文件。当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值.


Makefile 自动化变量

在这里插入图片描述

Makefile内容很多,目前仍在学习会一直更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值