Linux内核构建系统之三
顶层Makefile的总体框架结构 既然前面我们说过顶层Makefile最为重要,那么我们就先来研究一下这个文件.在你用VI编辑器打开这个文件时,千万别被它的复杂吓倒.这个文件虽然行数颇多,但其实里面也是有道道可寻的,我们可以抽出其中最重要的框架结构出来,列出如下(稍做整理和缩进):
从上面的框架中可以看出,影响内核构建过程动作的有数个变量,分别是:KBUILD_SRC, KBUILD_OUTPUT, skip-makefile, mixed-targets, config-targets 和 dot-config.我们将它们分成两组,前三为一组,后三个为一组.显然,前一组影响着框架中最外面的两个ifeq-endif块,而后一组则决定了第二个ifeq-endif块内的逻辑. 对于第一组变量,其实是为了支持"make O=1 [Targets]", 也就是为了支持将输出文件放到另外目录(不同于内核源代码目录的其他目录)的功能而准备的.那到底是如何支持的呢?我们说其实这是两次调用顶层Makefile的过程.
既然KBUILD_OUTPUT的值为dir, 那第二次调用顶层Makefile的过程又是在哪里呢?答案是在对A部分的处理上.我们列出A部分中关键的代码:
从这里,我们可以看出,不管命令"make O=dir [Targets]"中的Targets个数有多少个,它们都是要依赖于 sub-make. make -C dir KBUILD_SRC=`pwd` KBUILD_EXTMOD="" -f `pwd`/Makefile [Targets] 这样一个命令的执行就和执行没带O=dir的"make [Targets]"命令差不多了.其差别只在于将输出文件存到dir目录,而非内核源码树目录而已. 从上面的框架中看出来,如果只是简单的"make [Targets]",那么就不会进去到第一个ifeq-endif块,而直接进到第二个ifeq-endif块中去处理了.这就要涉及到上面说到的第二组变量了.我们说,设置第二组变量的目的,就是为了适应make命令后面所跟Targets数目和类型上的多样性而已.
在详细分析第二个ifeq-endif块之前,让我们看看第二组变量的含义以及它们的初始值设置情况.
【原文请至这里浏览:http://yihect.juliantec.info/julblog//post/4/19】
本文出自 “巨立安技术老师写的文章” 博客,请务必保留此出处http://juliantec.blog.51cto.com/2773953/500222
|
|||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |