2012-03-23 4 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 $< 

Однако ... Кажется, я припоминаю, что $ < вон» t всегда возвращает 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,$^) 
Смежные вопросы