2012-03-23 62 views
1

讓我們說我有:如何獲得目標的最後一個依賴項?

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 $< 

不過......我似乎記得,$<韓元」在這種情況下,總是返回target.c,例如,如果target.h中的更改觸發了此規則,則$ <將返回target.h。那麼有什麼辦法可以一直這樣做嗎?

回答

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,$^) 
相關問題