欢迎 chinavb 加入本站!
 免费注册  用户登陆  汇款方式  汇款确认  产品报价  联系我们  帮助中心
加入收藏
设为首页
会员体系
申请VIP
网站首页 光盘超市 软件下载 技术文章 专题 用户中心 VIP会员 技术论坛 网站留言 娱乐中心 卓越资源
今天是:2009年01月08日 星期四  您现在位于: 首页 → 技术文章 → 常用命令之 make常...
   常用命令之 make常见规则解析
作者:wide  出处:Unix爱好者家园unix-cd.com  更新时间: 2006年06月10日 
   
这是一段在Makefile中常见的规则

clean:
rm -r core *.o *.a tmp_make
for i in *.c; do rm -f `basename $$i .c`.s; done
(cd chr_drv; make clean)
(cd blk_drv; make clean)
(cd math; make clean)

第一句的 rm -f core *. *.a tmp_make 作用只是删除文件,意思直白,没什么好说的。
第二句 for 循环遍历目录下所有的文件,将所有后缀名为.c文件名依次赋给i。然后执行do语句,当符合循环结束是执行done。可以说这里的for和shell里for语法是如此貌似。

我们可以来做个实验来验证一下:
$ mkdir test #建立个实验用的目录
$ cd test
$ touch a.x #建几个实验用的文件
$ touch b.x
$ touch yy.x
$ vi Makefile #写个实验脚本
在文件中写入:

clean:
for i in *.x; do echo $$i; done

写好后,保存退出。运行命令:
$ make 

随后可看到输出的结果:
for i in *.x;do echo $i;done
a.x
b.x
yy.x

看到结果,for语句实现的功能就很清楚了。
对于结果,有一个怪异的就是,原来脚本中的$$i,在输出是就变成了$i。这时的for是不是就是一样了。现在可以先做个结论,make处理脚本可shell处理脚本几乎雷同,只是个别情况下要做变通。make会对$x进行扩展。比如:
ec=echo
test:
$(ec) 'ddd'

就可以在屏幕上看到输出:
echo 'ddd'
ddd

所以应该是make对Makefile进行处理,将其变成shell可执行的脚本,最后由shell解释器来执行有make翻译过的脚本。并且是翻译一句然后shell执行一句,对于这个可以再做个验证。

e =echo
prt=ls
clean:
$(prt)
for i in *.x;do $e $$i;done

其输出为:
ls
a.sh a.x b.x Makefile yy.x
for i in *.x;do echo $i;done
a.x
b.x
yy.x
可以看到,$(prt)被扩展后就立即执行了。后面的for也是这样。

到这里开篇的那个例子算是解析完毕了。下面在看看Makefile中的规则定义,在make中的规则分为两种,一种是显示规则,另一种无可争议的就是隐含规则了。

显示规则,定义如下

目标文件 : 依赖文件
生成目标文件的规则


隐含规则
.源文件扩展名.目标文件扩展名:
生成目标文件的规则

在使用隐含规则时要使用一些内定宏来指定文件名:
$@ 全路径的目标文件
$* 去除扩张名的全路径的目标文件
$? 所有源文件名
$< 源文件名 
 
 (本文已被浏览 2579 次)
 发布人:sdccf
 → 推荐给我的好友
上篇文章:shell技术要点
下篇文章:bash的内部命令
 相关文章:
Linux系统下软件包管理(7) Linux系统下软件包管理(6)
Linux系统下软件包管理(5) Linux系统下软件包管理(4)
Linux系统下软件包管理(3) 让Linux象Windows一样安装卸载
GNU make中文手册 shell编程例子 -- 一个makefile例子
Linux操作系统中GCC的应用介绍(上) Linux/Unix环境下的make和makefile详解
GNU make中文手册-(附录)关键字索引 GNU make中文手册-(15)make的常见错误信息
GNU make中文手册-(14)Makefile的约定 GNU make中文手册-(13)和其它版本的兼容
GNU make中文手册-(12)GNU make的特点 GNU make中文手册-(11)使用make更新静态库文件
GNU make中文手册-(10)make的隐含规则 GNU make中文手册-(9)执行make
GNU make中文手册-(8)make的内嵌函数 GNU make中文手册-(7)Makefile的条件执行

相关搜索
查看百度中关于常用命令之 make常见规则解析的更多内容
查看google中关于常用命令之 make常见规则解析的更多内容
   文章分类
操作系统 |
SCO_UNIX  Sun_Solaris  IBM_AIX  HP_UX  Linux  BSD  Tru64_UNIX 
通用UNIX知识  Windows  Minix 
程序设计 |
Shell编程  C/C++  汇编  PHP  JAVA  Perl  Python 
ASP/HTML  XML  中间件 
数据库 |
Oracle  Informix  Sybase  Fox  DB2  SQL  MySQL 
PostgreSQL 
网络应用 |
网络应用 
计算机硬件 |
计算机主机  打印机  路由器  交换机  终端  磁带机  MO 
刻录机  终端服务器  调制解调器 
   文章评论
  → 评论内容 (点击查看)   共0条评论,每页显示5条评论   浏览所有评论
(没有相关评论)
  → 发表我的评论
您的姓名: 您的Email:
评论内容:
250字内
发表评论:      发表评论须知 →
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  • 关于我们 ┋  网站留言 ┋  网站地图 ┋  友情链接 ┋  与我在线 ┋  汇款确认 ┋  管理 ┋  TOP
    Unix爱好者家园  http://www.unix-cd.com/
    联系我们:sdccf@163.com
    腾讯QQ: 7644599
    备案序号:鲁ICP备05000455号
    Copyright (c) 2001-2008 Unix-cd.com. All Rights Reserved.