一、显式规则(Explicit Rules)
通常在写makefile时使用的都是显式规则,这需要指明target和prerequisite文件。一条规则可以包含多个target,这意味着其中每个target的prerequisite都是相同的。当其中的一个target被修改后,整个规则中的其他target文件都会被重新编译或执行。通配符(Wildcards)
make支持的通配符与Bourne shell基本相同,包括~, *, ?, [...], [^...]。*.* 表示了所有文件;
? 表示任意单个字符;
[...] 表示一个字符类;
[^...] 表示相反的字符类。
~ 表示当前用户的/home路径,~加用户名可以表示该用户的/home路径。
注意: make会在读取makefile的时候就自动补充好通配符替代的内容,而shell则是在执行命令的时候才会进行通配符替代,在某些复杂情况,这两种方式会有极大的区别。
伪目标(Phony Targets)
多数情况下makefile中的target目标文件是像前面提到的那样带有指定的prerequisite文件,但也有一些target仅仅是作为一个标签,代表了一条命令,这种不代表任何文件的目标就被称为伪目标。常见的伪目标例如在makefile开头部分的第一个目标 all, 以及前面例子中见到的 clean:clean:
rm -f *.o lexer.c
但是,