@cyysu
2017-10-17T08:05:23.000000Z
字数 1345
阅读 914
- 时间:22017年10月17日
- 作者:Kali
- 邮箱:cyysu.github.io@gmail.com
- 版本:3.0
- 描述:Makefile-项目六,继Makefile项目篇五的Makefile
Makefile系列教程
# Makefile基础
-include include XX目录 表示让make忽略不能读进来的include文件,继续执行。
# 这里说一下前面有个地方没有注释的信息
# 给core-y列表追加其它目录
ifeq ($(KBUILD_EXTMOD),)
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
# 分两步,外面是替换函数将'%/'替换成'%',filter函数将串中符合模式'%/'的子串返回
# 然后去除以/结尾的串中的/符号,最后全部是不以/结尾的
# $(patsubst <pattern>, <replacement>, <text>),若pattern中有%,而replacement中也有%
# 那么replacement中的%表示pattern中匹配的%内容
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
$(net-y) $(net-m) $(libs-y) $(libs-m)))
#分两步,外面是去重复、返回升序排序后的两个列表,里面是与上面一样
vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
$(init-n) $(init-) \
$(core-n) $(core-) $(drivers-n) $(drivers-) \
$(net-n) $(net-) $(libs-n) $(libs-))))
#到这里init-y等值没变,上面的操作只是返回改变后的值,原变量值没变。
#下面,给每个列表重新赋值,各列表变成相应的对象目标(顶层目录)
#把这些目标连接到一起,就构成了vmlinux-main
init-y := $(patsubst %/, %/built-in.o, $(init-y))
core-y := $(patsubst %/, %/built-in.o, $(core-y))
drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
net-y := $(patsubst %/, %/built-in.o, $(net-y))
libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
libs-y := $(libs-y1) $(libs-y2)
到此篇位置,就不在继续讨论Linux内核,主要的原因是太过庞大,一方面笔者能力有限,一方面也是时间的原因。总结来说,前面几篇内容已经把我们常用的函数以及写法都用到了,剩下就是开始自己编写Makefile项目,不然学习的东西全部都会忘掉了。
支付宝 微信