具有多个目标的模式规则

模式规则可以有多个目标,但与普通规则不同,配方负责制作所有目标。例如:

debug/%.o release/%.o: %.c
    $(CC) $(CFLAGS_DEBUG) -c $< -o debug/$*.o
    $(CC) $(CFLAGS_RELEASE) -c $< -o release/$*.o

是一个有效的规则,当必须构建其中一个时,它将构建调试和释放对象。如果我们写了类似的东西:

debug/%.o release/%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

当只构建 debug/*.orelease/*.o 中的一个时它会工作,但是当它们都必须构建时,它只会构建第一个目标(并考虑第二个目标是最新的)。