设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 操作系统 >> 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 简介(5)
  如果没有使用"-f"或"--file"选项,make 会尝试缺省的makefile 文件名。和指明"-f"或"--file"选项不同,make 不能确定这些文件是否应当存在。然而,如果缺省makefile 不存在但可以通过运行make 规则生成,你可能希望这些规则被运行使得makefile 可以使用。

  因此,如果没有缺省makefile,make 试图按照makefile 名查找的顺序生成它,直到成功或名字用完。注意如果make 不能找到或生成makefile,这并不是错误;makefile 不总是必需的。

  当使用"-t"或"--toUCh"选项时,不希望使用过时的makefile 来决定那个目标来touch。所以"-t"选项对makefile 更新不起作用;类似"-q"(or ‘-question")和"-n"(or "-just-print")不阻止makefile 的更新,因为过时的makefile 会产生错误的输出。这样"make -f mfile -n foo"会更新"mfile",读入它,打印出更新"foo"需要执行的命令但不运行这些命令。与"foo"有关的命令是更新过的"mfile"中的内容。

  但是有时不希望更新makefile,可以将makefile 作为命令行的目标,当makefile被显式指定为目标时,"-t"选项也适用于它们。

  这样"make -f mfile -n mfile foo"会读入"mfile",打印出更新执行的命令,"foo"的命令是当前的"mfile"中的内容。

2.5 重载makefile

  可以使用"include"指令来包含其它makefile,增加目标的变量定义。然而,make 不允许同一个目标有不同的命令,有其它的途径可以达到目的。

  假设有"makefile" 和"mfile","makfile"要包含"mfile",但都有对于目标"foo"的规则。这是可以在"makefile"中写一条匹配任意模式的规则,指明当make 在"makefile"中未找到目标时,搜索"mfile":

  foo:
  frobnicate > foo
  %: force
  @$(MAKE) -f mfile $@
  force: ;

  当执行"make foo"时,make 找到"makefile",执行命令" frobnicate > foo";执行"make bar"时,在"makefile"中未找到相应的规则,这时模式规则适用,执行命令"make -f mfile bar","makefile"中未提及的其它目标也是类似的。
  这种方法之所有工作是因为模式规则的模式是"%",可以匹配任何的目标;这条规则的依赖是"force",保证即使目标存在命令也会执行;"force"规则的命令为空防止"make"为其搜索隐式规则-这样会导致依赖循环。

3 规则

  makefile 中的规则描述如何生成特定的文件,即规则的目标。规则列出了目标的依赖文件,指定生成或更新目标的命令。规则的次序是不重要的,除非是确定缺省目标:缺省目标是第一个makefile 中的第一个规则;如果第一个规则有多个目标,第一个目标是缺省的。有两个例外:以"."开头的目标不是缺省目标;模式规则对缺省目标没有影响。

  通常我们所写的第一个规则是编译整个或makefile 中指定的所有程序。

3.1 例子

  foo.o : foo.c defs.h      # module for twiddling the frobs
  cc -c -g foo.c

  它的目标是"foo.o",依赖于"foo.c"和"defs.h",有一个命令"cc -c -g foo.c"。命令行以TAB 字符开始标识它是一个命令。

  这条规则说明两件事:如何决定"foo.o"是旧的:如果它不存在,或者"foo.c"或者"defs.h"比它新。如何更新"foo.o"文件:通过运行"cc"程序。命令未提及"defs.h",但可以猜想"foo.c"包含了它,这是"defs.h"被置于依赖关系中的理由。

3.2 规则的语法

共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