博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GNU make manual 翻译( 一百一十五)
阅读量:5786 次
发布时间:2019-06-18

本文共 3050 字,大约阅读时间需要 10 分钟。

继续翻译

4.11 Multiple Rules for One Target==================================One file can be the target of several rules.  All the prerequisitesmentioned in all the rules are merged into one list of prerequisites forthe target.  If the target is older than any prerequisite from any rule,the recipe is executed.   There can only be one recipe to be executed for a file.  If more thanone rule gives a recipe for the same file, `make' uses the last onegiven and prints an error message.  (As a special case, if the file'sname begins with a dot, no error message is printed.  This odd behavioris only for compatibility with other implementations of `make'... youshould avoid using it).  Occasionally it is useful to have the sametarget invoke multiple recipes which are defined in different parts ofyour makefile; you can use "double-colon rules" (*note Double-Colon::)for this.   An extra rule with just prerequisites can be used to give a few extraprerequisites to many files at once.  For example, makefiles often havea variable, such as `objects', containing a list of all the compileroutput files in the system being made.  An easy way to say that all ofthem must be recompiled if `config.h' changes is to write the following:     objects = foo.o bar.o     foo.o : defs.h     bar.o : defs.h test.h     $(objects) : config.h   This could be inserted or taken out without changing the rules thatreally specify how to make the object files, making it a convenientform to use if you wish to add the additional prerequisiteintermittently.   Another wrinkle is that the additional prerequisites could bespecified with a variable that you set with a command line argument to`make' (*note Overriding Variables: Overriding.).  For example,     extradeps=     $(objects) : $(extradeps)means that the command `make extradeps=foo.h' will consider `foo.h' asa prerequisite of each object file, but plain `make' will not.   If none of the explicit rules for a target has a recipe, then `make'searches for an applicable implicit rule to find one *note UsingImplicit Rules: Implicit Rules.).

4.11 一个目的的多个规则

==================================

一个文件可以作为多个规则的目的。所有的规则中所提到的所有的前提条件,被合并到此目的的一个前提条件列表中。如果目的比某个规则中的某个前提条件旧,则其片段被执行。

对一个文件而言,可以只有一个片段来执行。如果有多个规则给出了对同一个文件的片段, make 会使用最后一个片段并且打印出一条出错信息。(特例,如果文件名字以. 开始,没有出错信息出现。这种古怪的行为只是为了和其他make实现的兼容, 你应该避免此种使用方式)。在某些场合下,让同一个目的激活在你的makefile种不同位置定义的多个片段是有益的,你可以使用 双冒号规则(*note Duouble-Colon::)

只有前提条件的增强型规则可以被用来一次性给出很多前提条件文件。例如,makefiel常常有一个变量,比如 objects, 包含了所有编译器输出文件的列表。一个表明如果config.h 发生变化则所有这些文件都需要重新编译的简单方法是这样的:

objects = foo.o bar.o

foo.o : defs.h
bar.o : defs.h test.h
$(objects) : config.h

这一段可以被插入或者拿出而不会影响到世纪定义如何创建目标文件的规则。如果你想要间歇性地追加额外的前提条件,这是一个方便的方式。

另一个窍门是,额外的前提条件可以通过make 的命令行参数来指定(*note Overriding Variables:Overriding.),例如,

extradeps=

$(objects) : $(extradeps)

意味着 指令 make extradeps=foo.h 会把 foo.h 当作每一个目标文件的前提条件,但是仅仅运行 make 则不会。

 如果对一个目的而言,没有一个显式规则包含片段,那么make 就会搜索合适的隐式规则。*note Using Implicit Rules: Implicit Rules.

后文待续

本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/09/25/2701890.html,如需转载请自行联系原作者

你可能感兴趣的文章
Web中的图标
查看>>
键盘事件-键代码编号
查看>>
借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
查看>>
自动化交易机器人Beta猪
查看>>
Java中调用 .net中的webservice 接口
查看>>
自己写的一个触发器
查看>>
学习笔记:MapReduce基本原理
查看>>
php全局变量
查看>>
[Noi2017]整数 BZOJ4942
查看>>
XML 新手入门基础知识(复制,留着自己看)
查看>>
Oracle中插入千万条测试数据
查看>>
“完美”解决微信小程序购物车抛物动画,在连续点击时出现计算错误问题,定时器停不下来。...
查看>>
单例设计模式懒汉式的缺陷
查看>>
Lattice DDR3 ip核仿真过程中的一些问题总结
查看>>
One git command may cause you hacked(CVE-2014-9390)
查看>>
HDU 4251 The Famous ICPC Team Again
查看>>
《Javascript高级程序设计》阅读记录(五):第六章 上
查看>>
单例模式的常见写法
查看>>
2019.2.13 SW
查看>>
页游战斗系统总结
查看>>