让我说我得到了:
target.o: target.h target.c
gcc $(CFLAGS) -c target.c
但我想摆脱多余的'target.c'。 我知道$<将给target.h,是否有一个内部宏将给target.c或者我应该重新排列它:
target.o: target.c target.h
gcc $(CFLAGS) -c $<
然而......我似乎记得$&lt;在这种情况下,并不总是返回target.c,例如,如果target.h中的更改触发了此规则,则$&lt;会返回target.h。那么有没有办法一直这样做?
答案 0 :(得分:6)
你应该使用你的第二个例子:
target.o: target.c target.h
gcc $(CFLAGS) -c $<
$<
总是评估第一个先决条件;哪一个导致配方运行无关紧要。有关详细信息,请参阅http://www.gnu.org/software/make/manual/make.html#Automatic-Variables。
如果你真的很偏执,你总是可以这样做(但这是不必要的):
target.o: target.c target.h
gcc $(CFLAGS) -c $(filter %.c,$^)