makefile预定义变量
预定义变量即系统自带的变量
![d82e39861615d345f4ca2438a23a424d.png](https://i-blog.csdnimg.cn/blog_migrate/69b843da65404ca598e2ee4b24b294e5.jpeg)
makefile自动变量
![964ef3a203974e03eb9f81fe2c196b2f.png](https://i-blog.csdnimg.cn/blog_migrate/3131b1732ea20fdb35c45ffba58a0695.png)
最下面两个常用
makefile隐式规则
自动寻找.o
文件对应的同名.c
文件
不用指定生成.o
文件的规则
相当于指定.o
文件以后,会自动将同名.c
文件进行编译
这在uboot
以及linux kernel
中是非常常见的、
在uboot
以及linux kernel
中经常出现include ···config.mk
,这也相当于包含一个子makefile,虽然文件名不像,但可以把它当作一个makefile文件来看待,二者基本没有区别
引用其他makefile及makefile嵌套
包含:
include makefile文件名
相当于子makefile文件直接展开
嵌套:
subsystem:
cd subdir && $(MAKE)
等价于:
subsystem:
$(MAKE) -C subdir
上面两种写法效果相同
makefile管理命令
![d59d181f87d2a6042c9851906762dff0.png](https://i-blog.csdnimg.cn/blog_migrate/38885f33295377b936fe166e5754ca2c.png)
源文件过多的编译方案
makefile分开多文件或者分级
output文件不止一个文件解决方案
- 多个makefile文件,互相嵌套
- 使用伪目标
make all
makefile环境变量
- 普通变量导出以后即为环境变量
一般要求环境变量大写
,普通变量小写
使用export 变量名
进行导出
- 使用环境变量 环境变量类似于工程中所有makefile之间共享的全局变量
定义一个环境变量会影响到工程中的其他makefile文件,因此小心使用
普通变量只在当前文件起作用
- makefile本身自带的环境变量 例如上面提到的预定义变量
执行make
命令的传参操作也相当于传入了一个环境变量(优先级最高,可以覆盖原来makefile文件中定义的变量值)
makefile通配符
![89453a68c638fa5804779ff62038e6ef.png](https://i-blog.csdnimg.cn/blog_migrate/0c78081ea8ce8b34f019eaf4bc7aa6a8.png)
%
表示任意字符,与*相似,但%
一般只用于规则描述中,所以又称为规则通配符