【转】 请教GNU make的扩展语法!

小弟在分析< >这本书上第2章的例子的时候,发现有很多关于makefile的语法搞不明白.还请高手指点一下,谢谢!
写的有点乱,请原谅!
[例1]
makefile:
obj-m :=module.o
命令:
make -C /usr/src/kernels/2.6.11-1.1369_FC4-i686 M='pwd' modules
问题:
1."obj-m"是在顶层makefile中定义的变量吗? 我记得makefile中变量应该是用"="赋值的,在这里用到的":="又是什么意思呢?
2.M=`pwd`中的"M"是一个编译选项吗?我一直没找到它的解释,记得以前见过SUBDIRS这个变量,在这里用SUBDIRS替换了一下"M",发现也是可以编译的.更奇怪的是,如果用
M=$(PWD)
或者SUBDIRS=$(PWD)也都是可以的(都是大写的),我现在只知道$(...)的作用是命令替换.我想请教一下PWD究竟是怎么定义的?
[例2]
#如果已经定义了KERNELRELEASE ,则说明是从内核构造系统调用的
#因此可以利用其内建语句
ifneq($KERNELRELEASE),)
obj-m :=hello.o
else
KERNELDIR ?=/lib/modules/$(shell uanme -r)/build
PWD :=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
这段程序感觉问题更多
问题:
1."?="是什么意思呢?
2.PWD :=$(shell pwd) PWD在这里是变量呢?还是个命令呢?必须要这么写吗?
3.$(KERNELDIR) 我觉得KERNELDIR应该是个路径,那么是不是应该用${KERNELDIR}呢?
因为如果是小括号,就是命令替换的意思了
4.#如果已经定义了KERNELRELEASE ,则说明是从内核构造系统调用的
#因此可以利用其内建语句
ifneq($KERNELRELEASE),)
obj-m :=hello.o
对于上面这段注释不太明白,什么叫做从"内核构造系统调用"呢?

andy820303 当前离线
回复时引用此帖

andy820303

查看公开信息

查找 andy820303 发表的更多帖子

旧 07-01-03, 11:29
第 2 帖

小锁 帅哥

小锁 的头像

注册会员

  注册日期: May 2003

  我的住址: 天津

  帖子: 1,604

精华: 5

info make

__________________
Unix Program = Framework + Components
-----------------------------------------------------
My blog: http://xiaosuo.cublog.cn

小锁 当前离线
回复时引用此帖

小锁

查看公开信息

访问 小锁 的个人网站

查找 小锁 发表的更多帖子

旧 07-01-08, 13:10
第 3 帖

freelion

注册会员

  注册日期: Jun 2003

  帖子: 28

  精华: 0

问题1:obj-m并不是从顶层定义的,你从make的语法手册上就可以找到:=和=的区别
问题2:M不是一个编译选项,而是一个变量,从顶层makefile文件里可以找到它的定义
建议看一下make的手册,网上有一本中文的《跟我学makefile》,还有关于内核编译的资料,可以在内核树下的Document下找到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值