Я учил себя GNU Сделал и подумал, что Redis Makefile научит меня кое-чему об этом инструменте.Как Redis Makefile содержит предварительные требования к файлам заголовков
Правило, которое компилирует исходный файл в объектный файл here:
%.o: %.c .make-prerequisites
$(REDIS_CC) -c $<
Обратите внимание, что правило суффикс просто упоминает исходный файл C (с% .c) в качестве предварительного условия.
Но если добавить эхо в середине и запустить сделать:
%.o: %.c .make-prerequisites
echo $^
$(REDIS_CC) -c $<
Тогда первые несколько строк вывода из делают, как показано ниже:
cd src && make all
make[1]: Entering directory `/home/cltpadmin/code/redis/src'
echo adlist.c .make-prerequisites adlist.h zmalloc.h
adlist.c .make-prerequisites adlist.h zmalloc.h
CC adlist.o
Как make
знать, что adlist.c
зависит от adlist.h
и zmalloc.h
?
Возможно, это подробно описано в другой части файла makefile? –
Я прочитал Makefile и не могу его найти. Отсюда вопрос. – ardsrk
Предварительные требования для файла makefile объединяются со всех мест, где указан объект. Таким образом, 'tgt: pr1',' tgt: pr2', 'tgt: pr3' будет объединяться таким образом, что make знает, что' tgt' имеет 'pr1',' pr2' и 'pr3' в качестве предварительных условий. Вывод (объемный, как есть) из 'make -qp' может быть полезен при поиске других мест. –