makefile模式规则
2017-09-27 17:19
295 查看
模式规则类似于普通规则,只是在模式规则中,目标的定义中需要包含“%”字符(确切地说 是一个),包含“%”的目标被用来匹配一个文件名,“%”可以匹配任何非空字符串。 1、文件名中“%”匹配的部分称为“茎”。 2、规则的依赖文件中同样可以使用“%”,依赖中的“%”的取值情况由“茎”决定。 3、规则的依赖文件也可以不包含模式字符“%”,此时,它表示所有符合目标模式的 目标文件都依赖于一个指定的文件。 4、模式的匹配 首先根据规则定义的目标模式匹配实际的目标文件,确定“茎”,之后使用 “茎”替代规则依赖 文件名中的模式字符“%”,生成依赖文件名。这样就形成了一个明确指定了目标和依赖文件的规则。 当目标模式中包含斜杠(目录部分)。在进行目标文件匹配时,文件名中包含的目录字符串在 匹配之前被移除,只进行基本文件名的匹配;匹配成功后,再目录加入到匹配之后的字符串之前形 成“茎”。文字的描述看起来比较复杂,来看一个例子:例如目标模式为“e%t”,文件“src/eat” 匹配于这个目标模式,那么“茎”就是“src/a”;模式规则中依赖文件的产生是:首先使用“茎” 非目录部分(“a”)替代依赖文件中的模式字符“%”,之后再将目录部分(“src/”)加入到形成的 依赖文件名之前构成依赖文件的全路径名。这里如果模式规则的依赖模式为“c%r”,则那么目标 “src/eat”对应的依赖文件就为“src/car”。 同样一个模式规则可以由多个目标文件。但是多个目标的模式规则和普通的多目标的规则有些 不同,普通多目标的规则的处理是将每一个目标作为一个独立的规则来处理,所以多个目标就就对 应多个独立的规则(这些规则各自有自己的命令行,各个规则的命令行可能相同)。但对于多目标 的模式规则,所有规则的目标共同拥有依赖文件和规则的命令行,当文件符合多个目标模式中的任 何一个时,规则定义的重建命令可能将会执行;因为多个目标共同用于这个规则的命令行,因此一 次命令执行之后,规则不会再去检查是否需要重建符合其它模式的目标。 #sample Makefile Objects = foo.o bar.o CFLAGS := -Wall %x : CFLAGS += -g %.o : CFLAGS += -O2 %.o %.x : %.c $(CC) $(CFLAGS) $< -o $@ 当我们在命令行中执行“make foo.o foo.x”时,会看到只有一个文件“foo.o”被创建了,同时 make会提示“foo.x”文件是最新的(其实“foo.x”并没有被创建)。它表明了多目标的模式规则 在make处理时是作为一个整体来处理的。这是多目标模式规则和多目标的普通规则的不同之处。 最后需要说明的是: (1)模式规则在Makefile中的顺序需要注意,当一个目标文件符合多个模式规则的目标时, make将会按照第一个找到的作为重建它的规则。 (2)在Makefile中指定的模式规则会覆盖隐含的模式规则。就是说在Makefile中明确指定的会 替代隐含的模式规则。 (3)另外,依赖文件存在或者被提及的规则,优先于那些需要使用隐含规则来创建其依赖文件的规则。
相关文章推荐
- C语言的本质(37)——makefile之隐含规则和模式规则
- makefile--模式规则(七)
- makefile详解 定义模式规则
- Makefile十六之模式规则及其自动化变量
- 从头开始写项目Makefile(八):模式规则
- 从头开始写项目Makefile(八):模式规则 .
- Makefile自动化变量与模式规则
- makefile中的模式规则
- Makefile的后缀规则和模式规则
- 对makefile 中的 静态模式规则的理解
- makefile详解 定义模式规则
- Makefile 隐含规则,模式规则,常见变量
- Makefile中的模式规则
- makefile预定义变量、自动变量、隐式规则、模式规则、make命令选项
- Makefile: Makefile 隐式规则 模式规则
- 《跟我一起写makefile》(笔记8--makefile中的隐含规则#模式规则#隐含规则变量#自动化变量)
- 从头开始写项目Makefile(八):模式规则
- 跟我一起写Makefile(14)--- 隐含规则(命令变量+命令参数变量+定义模式规则+自动化变量+模式匹配+)
- 跟我一起写Makefile(8)--- 书写规则(规则语法+通配符+文件搜索+伪目标+多目标+静态模式+自动依赖)
- 对 makefile 中 $*和静态模式规则结合的学习