如何获得目标的最后依赖?

时间:2012-03-23 22:59:54

标签: makefile

让我说我得到了:

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。那么有没有办法一直这样做?

1 个答案:

答案 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,$^)