LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1462|回复: 8

MakeFile的简单问题

[复制链接]
发表于 2003-5-25 08:18:16 | 显示全部楼层 |阅读模式
请问大侠,在一个MakeFile.in文件中,有这样的语句:
OBJDUMP = @OBJDUMP@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
STRIP = @STRIP@

用两个'@'号把式子夹在中间,这代表什么意思?
发表于 2003-5-25 08:51:45 | 显示全部楼层
That's for GNU's autoconf :p
 楼主| 发表于 2003-5-25 09:56:41 | 显示全部楼层
MakeFile.in的文件当然是for autoconf的,这整个文件的所有语句都可以用这句话来解释。
  但能不能请大侠稍微说说,用两个@夹着一个量,这种语法是何意?
发表于 2003-5-25 10:37:15 | 显示全部楼层
比较一下Makefile.in和Makefile就明白了。
这是一段Makefile.in文件的内容:
####### kdevelop will overwrite this part!!! (begin)##########
SHELL = @SHELL@

srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@

再来看看Makefile的对应部分:
####### kdevelop will overwrite this part!!! (begin)##########
SHELL = /bin/sh

srcdir = .
top_srcdir = .
VPATH = .
prefix = /opt/kde-3.1.0/
exec_prefix = ${prefix}

很明显可以看出,两个@夹着的变量是宏。当执行configure时,configure脚本会把这些宏替换成相应的内容。比如路径,编译的参数等等。
 楼主| 发表于 2003-5-25 10:52:45 | 显示全部楼层
谢谢kj501
调用宏的语法不是这样吗:$(宏名)
两种做法有什么不同?我看 @宏名@ 这种做法中,宏名在本文件中都是没有定义的。这是为何?
发表于 2003-5-25 11:32:02 | 显示全部楼层
说错了,应该是变量,不是宏。
这篇文章说得很详细,你去看看吧:
http://263.aka.org.cn/Lectures/0 ... ture-2.1.4/230.html
发表于 2003-5-25 13:45:50 | 显示全部楼层
这是m4的宏吧
如果想知道是什么意思的话应该看看m4说明
发表于 2003-5-26 01:29:58 | 显示全部楼层
Makefile 自己的变量是用 $xxxx 这样的,autoconf 的变量当然就不能用一样的格式了,否则就乱了。autoconf 的变量就变成 @xxxx@ 这样的了,至于为什么 makefile 里面没有这些变量的定义,因为这些变量定义在 autoconf 里。
 楼主| 发表于 2003-5-26 11:19:44 | 显示全部楼层
谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表