免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5675 | 回复: 20
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-05 15:44 |只看该作者 |倒序浏览
有关linux内核Makefile的疑问

   366  no-dot-config-targets := clean mrproper distclean \
   367                           cscope TAGS tags help %docs check% \
   368                           include/linux/version.h headers_% \
   369                           kernelrelease kernelversion
   370
   371  config-targets := 0
   372  mixed-targets  := 0
   373  dot-config     := 1
   374
   375  ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
   376          ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
   377                  dot-config := 0
   378          endif
   379  endif
   380
   381  ifeq ($(KBUILD_EXTMOD),)
   382          ifneq ($(filter config %config,$(MAKECMDGOALS)),)
   383                  config-targets := 1
   384                  ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
   385                          mixed-targets := 1
   386                  endif
   387          endif
   388  endif
   389
   390  ifeq ($(mixed-targets),1)
   391  # ===========================================================================
   392  # We're called with mixed targets (*config and build targets).
   393  # Handle them one by one.
   394
   395  %:: FORCE
   396          $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@
   397
======================================================================
396行如何工作的,那位给解释一二?
这是linux内核2.6.18上的头文件。

[ 本帖最后由 白丁布衣 于 2008-6-11 16:54 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-06-05 16:47 |只看该作者
please refer to Documentation/kbuild/makefiles.txt

论坛徽章:
0
3 [报告]
发表于 2008-06-05 16:56 |只看该作者

回复 #2 xpl 的帖子

抱歉。这个文本我读了。我没有发现线索。诸位可以提供线索,解答,或者讨论的,请?

论坛徽章:
0
4 [报告]
发表于 2008-06-05 17:17 |只看该作者
Q means quiet. defined in Makefile.  maybe '@'

MAKE is make

srctree is the source code tree. defined in Makefile:

srctree                := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))


$@ is a gnu make symbol.


you can refer to Makefile, script/Makefile.build, script/Makefile.lib

论坛徽章:
0
5 [报告]
发表于 2008-06-05 17:25 |只看该作者

回复 #4 xpl 的帖子

xpl兄,请试一下这个Makefile:
%::
<TAB>@echo $@

嗯。执行这样的命令即可:make aa bb
如果执行make aa bb,那么396相当于:
@$(MAKE) -C $(srctree)  KBUILD_SRC=aa
@$(MAKE) -C $(srctree)  KBUILD_SRC=aa
最好看一下Makefile本身。乐意请教。

[ 本帖最后由 白丁布衣 于 2008-6-5 17:30 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-06-06 09:08 |只看该作者
原帖由 白丁布衣 于 2008-6-5 17:25 发表
xpl兄,请试一下这个Makefile:
%::
@echo $@

嗯。执行这样的命令即可:make aa bb
如果执行make aa bb,那么396相当于:
@$(MAKE) -C $(srctree)  KBUILD_SRC=aa
@$(MAKE) -C $(srctree)  KBUILD_SRC=a ...


没有明白你的要表达的意思.

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

回复 #6 xpl 的帖子

[bybd@localhost tmp]$ cat Makefile
%::
        @echo $@
[bybd@localhost tmp]$ make aa bb
aa
bb

xpl兄,如果我们在内核源码目录下执行了make config bzImage,那么mixed-targets=1,然后,396行就要执行如下的命令了:
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC=config
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC=bzImage

这是目前我不理解的,为什么要这么处理。
make config bzImage可以正确处理config和bzImage目标;甚至目标之间有依赖关系,并且目标在make命令里出现的次序无关紧要。为什么使用396行的命令,这个命令是如何起作用的。

[ 本帖最后由 白丁布衣 于 2008-6-6 11:16 编辑 ]

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

回复 #6 xpl 的帖子

[bybd@localhost tmp]$ cat Makefile
mixed-targets=0
ifneq (filter config $(MAKECMDGOALS),)
config-targets := 1
ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
mixed-targets := 1
endif
endif
%::
        @echo mixed-targets=$(mixed-targets)
        @echo Targets: $@
[bybd@localhost tmp]$ make config
mixed-targets=0
Targets: config
[bybd@localhost tmp]$ make config bzImage
mixed-targets=1
Targets: config
mixed-targets=1
Targets: bzImage

论坛徽章:
0
9 [报告]
发表于 2008-06-06 15:52 |只看该作者
对于你指定两个目标的情况,makefile应该是顺序的执行这两个目标.
因而,使用%来通配定义所有的目标.

然后:
  $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@

这句就是执行一个特定的目标,其语法应该没有什么特别的地方.

其最终的效果应该是顺序执行了两个目标.


具体的执行语句,应该是在script/Makefile.build文件中定义的. 里面好多的shell和gnu make的语句.

这个文件很久以前我看过,很多地方都忘了,不过当时也有不少语句没弄太明白,我的shell学的挺差的.

只能给你提示个大概了.

你继续研究一下,弄清楚了发个帖子大家讨论一下.

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

回复 #9 xpl 的帖子

本来想偷偷懒。唉.........
那位弄通了,讲讲嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP