具有多个目标的模式规则
模式规则可以有多个目标,但与普通规则不同,配方负责制作所有目标。例如:
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/*.o
或 release/*.o
中的一个时它会工作,但是当它们都必须构建时,它只会构建第一个目标(并考虑第二个目标是最新的)。