Advertisement

自动化解决方案:完全自动化变量管理

阅读量:

10.5.3 自动化变量
在模式规则中,规则所对应的目标及依赖文件名代表了一类特定的文件集合;而规则的命令部分则描述了对这一类文件进行重建的具体过程。显然,在命令中不应出现具体的文件名,否则将导致模式规则失去其原本的意义。因此,在模式规则的命令行中如何表达这些文件,成为本小节探讨的核心内容。
假设需要编写一个将.c源文件编译为.o目标文件的模式规则,那么在调用gcc时应该如何正确地表示源文件名?显然,不能使用任何具体的名称,因为每次执行该模式规则时所涉及的源文件都会发生变化。为了解决这一问题,就需要引入“自动化变量”。这类变量的取值依据具体执行的规则而定,并由该规则的目标和依赖文件名决定。
接下来将逐一介绍所有自动化变量的具体含义:
@** 用于表示当前规则的目标文件名。若目标为文档类型(在Linux系统中通常称为.a静态库),则它代表该文档的完整名称。对于多目标模式规则而言,则指向触发该规则执行的具体目标名称。 **%
当目标是一个静态库时,此变量表示静态库中的某个成员名称。例如,若目标为“foo.a(bar.o)”,则“%”对应的值是“bar.o”,而“@”对应的值则是“foo.a”。若目标不是静态库,则此变量为空。
$ <
用于表示第一条依赖项的文件名。如果使用隐含规则来构建一个目标,则它代表隐含规则所添加的

全部评论 (0)

还没有任何评论哟~