make允许的规则
1. 具体规则
2. 模式规则
用通配符而不是明确的文件名,主文件名会被表示成%,且只能出现一次。
如:
%.o: %.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
3. 后缀规则
后缀规则中的工作目标,可以使一个扩展名或两个被衔接在一起的扩展名
.c.o:
$(COMPILE.c) $(OUTPUT_OPTION) $<
这个规则和上面的模式规则效果一样。
上面是双后缀规则,还有单后缀规则。
只需之处源文件的扩展名
.p:
$(LINK.p) $^ $(LOADLIBS) $(LDLIBS) -o $@
这个规则等效于:
%: %.p
$(LINK.p) $^ $(LOADLIBS) $(LDLIBS) -o $@
注意: make只会在扩展名在已知扩展名列表中时,才会视之为后缀规则。
可以定义.SUFFIXS变量来增加已知的扩展名列表。
4. 静态模式规则
像正规模式规则,值不过它们只能应用在一串特定的工作目标文件中。
如:
$(OBJECTS): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
这个规则和模式规则唯一差别是开头的$(OBJECTS): 。 这表明,该规则只能应用在$(OBJECTS)变量中所列举的文件上。
还有一种叫隐含规则,其实应该就是make内置的规则。一般由模式规则和后缀规则来表示。
可以这样来删除指定的内置规则
%.o: %.l
%.c: %.l
一个没有指定命令脚本的模式规则将删除相应的规则。
5.还有一种是双冒号规则
通常我们看到的都是单冒号的规则,这样make看到相同的工作目标,会把必要条件都加到这个工作目标中,形成一个关系依存图。
但是如果看到双冒号规则,就不一样了。它会依据必要条件的时间戳,是否在工作目标时间戳之后,以不同的命令来更新同一个工作目标。
听上去很牛,没有试过。