“隐含规则”为 make 提供了重建一类目标文件通用方法,不需要在 Makefile 中明确地给出
重建某一个目标的命令,甚至可以不用写出明确的规则。make会自动根据已存在(或者可以被创建)
的源文件类型来启动相应的隐含规则。
1、make会对那些没有命令行的规则、 双冒号规则寻找一个隐含规则来执行。
注意:如果规则存在命令行,则make就会执行命令行,不会启动隐含规则。
2、作为一个规则的依赖文件,在没有一个规则明确描述它的依赖关系的情况下,
make会将其作为一个目标并为它搜索一个隐含规则,试图重建它。
3、给目标文件指定明确的依赖文件并不会影响隐含规则的搜索。
我们来看一个例子:
foo.o: foo.p
这个规则指定了“foo”的依赖文件是“foo.p”。但是如果在工作目录下存在同名.c源文件“foo.c”。
执行make的结果就不是用“pc”编译“foo.p”来生成“foo”,而是用“cc”编译“foo.c”来生
成目标文件。这是因为在隐含规则列表中对.c文件的隐含规则处于.p文件隐含规则之前。
重建内嵌隐含规则
重建一个隐含规则时,需要使用相同的目标和依赖文件,但是命令可以不同。这样就替代了
有相同目标和依赖的那个make内嵌的规则,替代之后的隐含规则的顺序由它在Makefile中的
位置决定。例如通常我们Makefile中可能会包含这样一个规则:
%.o : %.c
$(CC) $(CFLAGS) –D__DEBUG__ $< -o $@
这个模式规则替代了编译.c文件的内嵌隐含规则。
也可以取消一个内嵌的隐含规则。同样需要定义一个和隐含规则具有相同的目标和依赖,没有
命令行的模式规则。例如:如下的规则取消了make编译.s文件的内嵌规则。
%.o : %.s
make隐含规则
最新推荐文章于 2023-05-25 21:10:35 发布