免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 白丁布衣
打印 上一主题 下一主题

有关linux内核Makefile的疑问 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-06-06 16:17 |只看该作者
自己研究一下还是会很有收获的.

我明天要出去渡假,不然和你一起看看.

期待你能搞明白写个东西大家看看.

论坛徽章:
0
12 [报告]
发表于 2008-06-09 21:18 |只看该作者
396          $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@
相当于:
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC='' $@

论坛徽章:
0
13 [报告]
发表于 2008-06-10 15:07 |只看该作者

偷懒记录,呵呵

[bybd@localhost tmp]$ make
world
[bybd@localhost tmp]$ cat Makefile
m:=hello
all:
        @echo $(m)
all: m := world
[bybd@localhost tmp]$ make all
world
[bybd@localhost tmp]$ make
world

论坛徽章:
0
14 [报告]
发表于 2009-02-11 12:28 |只看该作者
看注释:

# To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets when calling make, including
# mixing *config targets and build targets.
# For example 'make oldconfig all'.
# Detect when mixed targets is specified, and make a second invocation
# of make so .config is not included in this case either (for *config).

意思是说只要多目标中有*config目标,表明目前的.config要更新,不能用。因此我们把*config目标提取出来先处理,
更新当前.config后,再make其它目标,递归下去,如果其它目标中又有*congfig目标,同样会提取出来先处理,
这就保证.config是最新的。

论坛徽章:
0
15 [报告]
发表于 2009-02-11 12:43 |只看该作者
原帖由 ferryyang 于 2009-2-11 12:28 发表
看注释:

# To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile
# It is allowed to specify more targets wh ...


不带这样扒坟的吧

半年前的帖子都能挖出来

论坛徽章:
0
16 [报告]
发表于 2009-02-11 15:19 |只看该作者
管它是什么时候的贴。这个在google上看到的,有想法就写一下。没什么讲究。

论坛徽章:
0
17 [报告]
发表于 2009-02-11 15:38 |只看该作者
原帖由 ferryyang 于 2009-2-11 15:19 发表
管它是什么时候的贴。这个在google上看到的,有想法就写一下。没什么讲究。



OK
so, continue...

那么就说说你的想法, 把code贴出来

论坛徽章:
0
18 [报告]
发表于 2009-03-04 16:38 |只看该作者

恩。把涉及的资料罗列一下,方便大家查找。

%:: FORCE是模式规则(万用模式规则,Match-Anything pattern rule),而非双冒号规则。我一度是考虑、实验这两种情况的。
接下来,是从徐海兵兄翻译的GNU make中文手册,ver - 3.8上拷贝的。系统上有make文档也可以参考make的html文档。
10.5.5 万用规则
当模式规则的目标只是一个模式字符“%”(它可以匹配任何文件名)时,我们称这个规则为万用规则。万用规则在书写Makefile时非常有用,但它会影响make的执行效率,因为make在执行时将会使用万用规则来试图重建其它规则的目标和依赖文件。
假如在一个存在万用规则的Makefile中提及了文件“foo.c”。为了创建这个目标,make会试图使用以下规则来创建这个目标:1.对一个.o文件“foo.c.o”进行链接并产生文件“foo.c”;2.使用c编译和连接程器由文件“foo.c.c”来创建这个文件;3. 编译并链接Pascal程序“foo.c.p”来创建;等等。总之make会试图使用所有可能的隐含规则来完成对这个文件的创建。
当然,我们很清楚以上这样的过程是没有必要的,我们知道“foo.c”是一个.c原文件,而不是一个可执行程序。make在执行时都会试图根据可能的隐含规则来创建这个文件,但由于其依赖的文件(“foo.c.o”、“foo.c.c”等)不存在,最终这些可能的隐含规则都会被否定。但是如果在Makefile中存在一个万用规则,那么make执行时所要考虑的情况就比较复杂,也很多(它会试图功过隐含规则来创建那些依赖文件,虽然最终这些文件不可能被创建,也无从创建),从而导致make的执行效率会很低。
为了避免万用规则带来的效率问题,我们可以对万用规则的使用加以限制。通常有两种方式,需要在定义一个万用规则时对其进行限制。
1. 将万用规则设置为最终规则,定义时使用双冒号规则。作为最终规则,此规则只有在它的依赖文件存在时才能被应用,即使它的依赖可以由隐含规则创建也不行。就是说,最终规则中没有进一步的“链”。
例如,从RCS和SCCS文件中提取源文件的内嵌隐含规则就是一个最终规则。因此如果文件“foo.c,v”不存在,make就不会试图从一个中间文件“foo.c,v.o”或“RCS/SCCS/s.foo.c,v”来创建它。 RCS 和 SCCS 文件一般都是最终的源文件,它不能由其它任何文件重建;make可以记录它的时间戳,但不会寻找重建它们的方式。
如果万用规则没有定义为最终规则,那么它就是一个非最终规则。非最终的万用规则不会被用来创建那些符合某一个明确模式规则的目标和依赖文件。就是说如果在Makefile中存在匹配此文件的模式规则(非万用规则),那么对于这个文件来说其重建规则只会是它所匹配的这个模式,而不是这个非最终的万用规则。例如,文件“foo.c”,如果在Makefile中同时存在一个万用规则和模式规则“%.c : %.y”(该规则运行Yacc)。无论该规则是否会被使用(如果存在文件“foo.y”,那么规则将被执行)。那么make试图重建“foo.c”的规则都是“%.c : %.y”,而不是万用规则。这样做是为了避免make执行时试图使用非最终的万用规则来重建文件“foo.c”的情况发生。
2. 定义一个特殊的内嵌哑模式规则给出如何重建某一类文件,避免使用非最终万用规则。哑模式规则没有依赖,也没有命令行,在make的其它场合被忽略。例如,内嵌的哑模式规则:“%.p :”为Pascal源程序如“foo.p”指定了重建规则(规则不存在依赖文件、也不存在任何命令),这样就避免了make试图“foo.p”而去寻找“foo.p.o”或“foo.p.c”的过程。
我们可以为所有的make可识别的后缀创建一个形如“%.p :”的哑模式规则。

[ 本帖最后由 白丁布衣 于 2009-3-4 16:41 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-03-04 16:54 |只看该作者

回复 #18 白丁布衣 的帖子

注意到%:: FORCE是被设置为最终规则的。所以,这个规则要起作用,如下条件必须满足依赖存在。为什么像FORCE这样的依赖也可行了,FORCE不存在呀。
make的手册上(徐兄翻译的甚是准确)说的是“依赖可以由隐含规则创建也不行”。就是说明确指定一个规则,来生成设置为最终规则的万用规则的依赖,是可以的,包含在“依赖存在的”范围内。
所以内核Makefile结尾部分有这么一行:
FORCE:
这一行是必须要的。

[ 本帖最后由 白丁布衣 于 2009-3-4 16:59 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2009-03-04 16:55 |只看该作者

回复 #19 白丁布衣 的帖子

关于这个规则的作用,请参考:
http://www.makelinux.net/make3/make3-CHP-11-SECT-2.html

xpl兄鼓励之言看到,呈谢。

[ 本帖最后由 白丁布衣 于 2009-3-4 17:00 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP