请教一个makefile
ifneq ($(KERNELRELEASE),)
obj-m := pcnet32.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
请问default下的语句是不是只有在KERNELRELEASE未定义的时候会执行一次,第二次读取该makefile时(KERNELRELEASE被定义),将不会再次执行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
会的
第一次是未定义执行下面这句
再make 到这的时候,就执行上面那句了
回复 2# amarant
也就说 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules会被执行两次?
回复 1# createwindow
第一次执行Makefle的时候,发现KERNELRELEASE没有被设置,则进入内核源码树所在的位置,读那个位置的Makefile,build是一个软链接指向内核树所在的目录。内核源码树的根Makefile对KERNELRELEASE变量进行了赋值。然后运行到了default,重新运行了这个Makefile文件。此时KERNELRELEASE已被赋值,这样就生成那个目标。先进入内核源码树找Makefile,然后在当前目录也就是模块源码目录生成模块。
如ls所言
回复 4# embeddedlwp
我最想知道的就是:
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
被执行一次或者两次,不好意思比较笨。
本帖最后由 amarant 于 2011-05-16 16:53 编辑
回复 6# createwindow
执行一次
回复 7# amarant
非常感谢两位的解答。
本帖最后由 embeddedlwp 于 2011-05-16 16:57 编辑
{:2_172:}