具有多個目標的模式規則

模式規則可以有多個目標,但與普通規則不同,配方負責製作所有目標。例如:

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 中的一個時它會工作,但是當它們都必須構建時,它只會構建第一個目標(並考慮第二個目標是最新的)。