Makefile学习

为什么要用Makefile ,因为工程中的.c文件太多,因此用makefile作项目管理

uboot和linux kernel本质都是由很多c文件组成,都是由makefile来管理

有目标,有依赖,有命令

1.目标就是我们要生成的东西

2.依赖就是我们生成目标的原材料

3.命令就是加工方法

2.makefile的自动推导和通配符

%是makefile中的通配符,%.o代表所有以.o为结尾的文件

makefile是很聪明的东西,他有个依赖关系,比如说想要得到.bin文件,就必须得到.o,想要得到.o,就必须得到.S,所以,makefile就会先生成.S,然后再生成.o,最后生成.bin文件。

 如果没找到,就会报错

2.变量的定义和使用,都没有变量类型,和shell一样,都是直接定义,引用变量时加$。

3. .PHONY是什么意思

伪目标意思是这个目标并不代表一个文件,执行这个目标不是为了得到某个东西,而是单纯为了执行这条目标下面的指令。

伪目标一般都没有依赖,既然一定要执行命令了,就不要加依赖(无条件执行) 伪目标前面可以加.PHONY来声明它是伪目标。

仅仅是为了好看而已。

4.makefile中引用其他makefile

用include来引用其他makefile   include/config.mk

5.makefile补充学习

makefile前面的@表示静默执行

 前面加@表示静默执行,不把命令本身打印出来

6.makefile的几种赋值运算符

?= 表示前面变量如果已经被赋值,那么就不用执行下面的命令,没有被赋值就是这个变量没有被命令

+=就是把原来的值加到原来的值后面,类似于strcat,两段文字之间会自动加空格

=如果用该号赋值,那么这个变量的值取决于最后一次赋给他的值

:=如果用这个来赋值,就会就地直接解析

 

makefile不要求=两边有空格

 

3.makefile的环境变量

makefile用export导出的就是环境变量,一般情况下环境变量名要大写,

环境变量是工程中所有makefile可以刚享的变量,定义一个环境变量会影响别人的,导出就是

 makefile中可能有一些环境变量是makefile本身自己内部定义的,我们在make时传给环境变量的值优先级最高

编译器预定的宏 _LINE_ _FUNCTION_

4.makefile中使用通配符

1.* 表示任意字符

echo *.c

2.? 代表一个任意字符

3.[]将中括号里面的值进行匹配

4.%为规则通配符

makefile的自动变量

常见自动变量

$@  直接等于目标  all

$<    等于依赖文件的第一个   如果在规则里面用,就又变成所有的了

$^  等于依赖文件的集合

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值