具有多個目標的模式規則
模式規則可以有多個目標,但與普通規則不同,配方負責製作所有目標。例如:
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
中的一個時它會工作,但是當它們都必須構建時,它只會構建第一個目標(並考慮第二個目標是最新的)。