2012-03-23 17 views
1

sagen wir, ich habe:Wie erhält man die letzte Abhängigkeit eines Ziels?

target.o: target.h target.c 
    gcc $(CFLAGS) -c target.c 

Aber ich möchte der redundanten ‚target.c‘ loszuwerden. Ich weiß, dass < $ target.h geben wird, gibt es ein internes Makro, das target.c geben oder sollte ich es einfach neu anordnen:

target.o: target.c target.h 
    gcc $(CFLAGS) -c $< 

aber ... Ich scheine, dass $ < won‘zu erinnern t in diesem Fall immer target.c zurückgeben, zum Beispiel, wenn eine Änderung in target.h diese Regel auslöst, dann würde $ < target.h zurückgeben. Gibt es eine Möglichkeit, dies konsequent zu tun?

Antwort

6

Sie sollten nur Ihr zweites Beispiel verwenden:

target.o: target.c target.h 
    gcc $(CFLAGS) -c $< 

$< wertet immer auf die erste Voraussetzung; Es spielt keine Rolle, welches das Rezept ausgelöst hat. Weitere Informationen finden Sie unter http://www.gnu.org/software/make/manual/make.html#Automatic-Variables.

Wenn Sie wirklich paranoid sind, könnten Sie dies immer tun (aber es ist nicht notwendig):

target.o: target.c target.h 
    gcc $(CFLAGS) -c $(filter %.c,$^) 
Verwandte Themen