[关闭]
@cyysu 2017-10-17T08:05:23.000000Z 字数 1345 阅读 914

Makefile-项目篇(六)

  • 时间:22017年10月17日
  • 作者:Kali
  • 邮箱:cyysu.github.io@gmail.com
  • 版本:3.0
  • 描述:Makefile-项目六,继Makefile项目篇五的Makefile

Makefile系列教程


基础准备

  1. # Makefile基础
  2. -include include XX目录 表示让make忽略不能读进来的include文件,继续执行。
  3. # 这里说一下前面有个地方没有注释的信息
  4. # 给core-y列表追加其它目录
  5. ifeq ($(KBUILD_EXTMOD),)
  6. core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
  7. # 分两步,外面是替换函数将'%/'替换成'%',filter函数将串中符合模式'%/'的子串返回
  8. # 然后去除以/结尾的串中的/符号,最后全部是不以/结尾的
  9. # $(patsubst <pattern>, <replacement>, <text>),若pattern中有%,而replacement中也有%
  10. # 那么replacement中的%表示pattern中匹配的%内容
  11. vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
  12. $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
  13. $(net-y) $(net-m) $(libs-y) $(libs-m)))
  14. #分两步,外面是去重复、返回升序排序后的两个列表,里面是与上面一样
  15. vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
  16. $(init-n) $(init-) \
  17. $(core-n) $(core-) $(drivers-n) $(drivers-) \
  18. $(net-n) $(net-) $(libs-n) $(libs-))))
  19. #到这里init-y等值没变,上面的操作只是返回改变后的值,原变量值没变。
  20. #下面,给每个列表重新赋值,各列表变成相应的对象目标(顶层目录)
  21. #把这些目标连接到一起,就构成了vmlinux-main
  22. init-y := $(patsubst %/, %/built-in.o, $(init-y))
  23. core-y := $(patsubst %/, %/built-in.o, $(core-y))
  24. drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
  25. net-y := $(patsubst %/, %/built-in.o, $(net-y))
  26. libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
  27. libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
  28. libs-y := $(libs-y1) $(libs-y2)

实战项目

到此篇位置,就不在继续讨论Linux内核,主要的原因是太过庞大,一方面笔者能力有限,一方面也是时间的原因。总结来说,前面几篇内容已经把我们常用的函数以及写法都用到了,剩下就是开始自己编写Makefile项目,不然学习的东西全部都会忘掉了。

打赏

                    支付宝                                                         微信

微信与支付宝支付

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注