设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 操作系统 >> SCO UNIX >> GNU Make 简介
精品推荐
SCO UNIX点击TOP10
·HP-UX系统备份与恢复全功略
·HP上安装ORACLE RAC
·GNU Make 简介
·SCO TCP/IP 网络管理
·在UNIX5.0.5 系统中巧用sar 命令进行系统维护
·UNIX系统被删文件的恢复策略
·在PC Xwindows远程登陆Unix上支持中文
·SCO UNIX学习宝典(基本配置及操作)
·UNIX系统下各文件的作用
·HPUX做代理服务器
操作系统点击TOP10
·Windows Vista完全硬盘安装法
·Windows Vista 激活不求人
·Windows Vista局域网网络连接设置
·Windows Vista系统动态桌面截图欣赏
·Windows XP中磁盘的分区应用
·Windows NT/2000/XP 出现蓝屏并显示“STOP 0x0000007f”错误
·让Windows XP变身Vista
·一招搞定Vista系统软件不兼容问题
·教你如何正确配置和优化Windows Vista
·只转两圈 加快Windows XP启动速度
精选专题

GNU Make 简介

作者: 来源:网络文章 时间:2005-12-13 0:44:56

GNU Make 简介(10)
  当命令`make extradeps=foo.h'执行时会认为"foo.h"是每个目标文件的依赖文件,但简单的"make"命令不是这样。

3.11 静态模式规则

  静态模式规则(static pattern rules)可以指定多个目标,并且使用目标名字来建议依赖文件的名字;比普通多目标规则更通用因为不需要依赖关系是相同的:依赖关系必须类似但不需要相同。

3.11.1 语法

  TARGETS ...: TARGET-PATTERN: DEP-PATTERNS ...
  COMMANDS
  ...

  TARGETS 列表指出规则应用的目标,可以包含通配符,于普通规则的目标相同。

  TARGET-PATTERN 和DEP-PATTERNS 来表明目标的依赖关系如何计算:匹配TARGET-PATTERN 的目标从名字中抽出一部分,叫做词干(stem),词干被替换到DEP-PATTERNS 来形成依赖文件名。
 
  每个模式通常包含一个"%"字符。当TARGET-PATTERN 匹配一个目标时,"%"字符可以匹配目标名中的任何部分;这部分即是词干,模式的其余部分必须完全匹配。例如"foo.o"匹配"%.o","foo"是词干;目标"foo.c"和"foo.out"并不匹配这个模式。

  目标的依赖文件名通过将DEP-PATTERNS 中的"%"替换为词干形成:如果依赖模式为"%.c",在替换词干"foo"可以得到"foo.c"。依赖模式中不包含"%"也是合法的,此依赖文件对所有的目标均有效。

  如果需要在模式规则中使用"%"字符,必须在其前面加"\"字符,如果"%"前的"\"字符是有实际意义的,必须在其前面加"\",其它的"\"不必如此处理。如"the\%weird\\%pattern\\"在有效的"%"前是"the%weird\",其后是"pattern\\"。最后的"\\"保持原样是因为其并不影响"%"字符。

  以下例子从相应的".c"文件编译"foo.o"和"bar.o":

  objects = foo.o bar.o
  $(objects): %.o: %.c
  $(CC) -c $(CFLAGS) $< -o $@

  每个目标必须匹配目标模式,对于不匹配的目标会给出警告。如果列表中只有部分文件匹配模式,可以使用filter 函数移去不匹配的文件名:

  files = foo.elc bar.o lose.o
  $(filter %.o,$(files)): %.o: %.c
  $(CC) -c $(CFLAGS) $< -o $@
  $(filter %.elc,$(files)): %.elc: %.el
  emacs -f batch-byte-compile $<

  例子中"$(filter %.o,$(files))" 结果是"bar.o lose.o"; "$(filter %.elc,$(files))" 的结果是"foo.elc"。

  以下例子说明"$*"的使用:

  bigoutput littleoutput : %output : text.g
  generate text.g -$* > $@

  命令 "generate"执行时,"$*"扩展为词干"big"或"little"。

3.11.2 静态模式规则和隐式规则

  静态模式规则和隐式规则在作为模式规则是具有很多共同点,都有目标模式和构造依赖文件名的模式,不同之处在于make 决定何时应用规则的方法。隐式规则可应用于匹配其模式的任何目标,但只限于没有指定命令的目标,如果有多条可应用的隐式规则,只有一条被使用,取决于规则的顺序。反之,静态模式规则适用于规则中明确目标列表,不适用于其它目标且总是适用于指定的每个目标。如果有两条冲突的规则,且都有命令,这是一个错误。

  静态模式规则比隐式规则优越之处如下:

  ★可为一些不能按句法分类,但可以显式列出的文件重载隐式规则
  ★不能判定目录中的精确内容,一些无关的文件可能导致make 适用错误的隐式规则;最终结果可能依赖于隐式规则的次序。适用静态模式规则时,这种不确定性是不存在的:规则适用于明确指定的目标。

3.12 双冒号规则

共14页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [148 :>

GNU Make 简介 相关文章:
GNU Make 简介 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com