QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1035|回复: 9

关于makefile的两点疑问,请教各位。

[复制链接]
发表于 2004-5-24 15:46:13 | 显示全部楼层 |阅读模式
第一,makefile 里的命令用的是什么语法?是外壳编程吗?比如说bash编程?
第二,在linux-2.4.26内核源码的根目录下的Makefile里有这么一句话
      
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
          else if [ -x /bin/bash ]; then echo /bin/bash; \
          else echo sh; fi ; fi)
在$里写的shell是什么意思,环境变量里描述外壳解释程序的不是“SHELL”吗?怎么变成小写了?还有,在外壳编程里介绍的if语句没有用“;”做分隔符呀?为什么跟在shell后的if语句用了好多分号?迷惑不解呀,哪位老大指点指点小弟!谢谢了。
发表于 2004-5-24 16:24:11 | 显示全部楼层
这个shell可能是make的内部命令
回复

使用道具 举报

发表于 2004-5-24 22:02:29 | 显示全部楼层
先讲“\”,它是续行符(如果空间允许其它那些代码是可以写在同一行上的);然后,()里的其实就是一段脚本,其中小写的shell就是用shell开始要执行其后的代码直到括号结束;最后通过$变量置换符将那一段代码的执行结果赋于变量CONFIG_SHELL。

这里的意思其实就是,如果$BASH值非空就将它赋于CONFIG_SHELL;要不若/bin/bash存在,则CONFIG_SHELL置值为/bin/sh;否则CONFIG_SHELL置值为sh。
回复

使用道具 举报

发表于 2004-5-25 10:44:15 | 显示全部楼层
make的command是抛给shell执行的,可以理解成makefile文件内嵌了许多shell程序。

GNU的make工具解读makefile文件,根据target:prerequsition... 进行编译连
接,然后将command部分抛给shell执行。
回复

使用道具 举报

 楼主| 发表于 2004-5-25 10:50:23 | 显示全部楼层
if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi ; fi

3楼的大侠,上面的是您所说的脚本,我有两个疑问。
第一,我看过外壳编程方面的资料,首先脚本编程里语句之间没有分号,其次应该只有一个fi做结束符呀。
第二,这里所说的shell是一个宏吗?(比如象path=$(PATH)里的$(PATH))如果是,那它的值是什么?如果不是,那$(shell 脚本)是不是make里调用脚本的一种特有的方式。
回复

使用道具 举报

 楼主| 发表于 2004-5-25 10:56:40 | 显示全部楼层
4楼的兄弟,您所指的“将command部分抛给shell执行”里的shell是指哪一个shell?bash?sh?还是make里内嵌的shell,可是我看上面的那段脚本有点像但又并不符合bash的语法。比如说bash的语句之间不用分号的呀。迷惑呀
回复

使用道具 举报

发表于 2004-5-25 12:39:43 | 显示全部楼层
两个if当然就有两个fi啦
回复

使用道具 举报

发表于 2004-5-25 20:20:02 | 显示全部楼层
怎不能用分号呀,你在命令行上执行ls;cal;date试试。分号使得在一行上执行多个命令。
回复

使用道具 举报

发表于 2004-5-26 09:49:02 | 显示全部楼层
你的系统用的是那个shell,当然就扔给哪个了。
分号的作用是起分隔作用,当2条或2条以上的
命令写在同一行里的时候,用分号把它们隔开
回复

使用道具 举报

 楼主| 发表于 2004-5-28 17:35:30 | 显示全部楼层
呵呵,shell命令没学好,各位老大不要见笑。谢谢各位的解释。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 05:30 , Processed in 0.109551 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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