Возникает вопрос: для foo.c
, файла .c
, используемого в другом месте в более крупном проекте, должна ли компиляция объектного файла foo.o
указываться в списке Makefile foo.h
как зависимость?
foo.o: foo.c foo.h
$(CC) $(CFLAGS) -c -o foo.o foo.c
Это просто вопрос соглашения?
Это мое мышление до сих пор, и удар по ответу:
Кажется, что любое законное изменение foo.h
потребует соответствующего изменения foo.c
. Таким образом, нет необходимости указывать foo.h
в качестве зависимости. Тем не менее, это, вероятно, хорошая идея, так как мы хотели бы получать уведомления немедленно (путем перекомпиляции), если изменение foo.h
что-то сломало в foo.c
.
#define
или изменение порядка членов структуры. Обработка заголовка как зависимости позволяет автоматически перестраивать соответствующий код. - person simonc   schedule 29.11.2013.h
к зависимостям. Он является частью списка суффиксов по умолчанию. . Вам придется явно перезаписать это правило, если вы не хотите, чтобы оно было частью зависимостей. - person Lucas   schedule 29.11.2013.h
отсутствует, он просто будет проигнорирован. Вы также можете добавить это правило следующим образом:%.o: %.c %.h $(COMPILE.c) $(OUTPUT_OPTION) $<
(с переносом строки после%.h
, но комментарии не позволяют мне это сделать). - person Lucas   schedule 30.11.2013%.h
, а make не знает, как его создать, make решит, что это неявное правило не соответствует, и перейдет к следующему неявному правилу. Если нет другого подходящего правила, make не выдаст сообщение об отсутствии правила для создания цели foo.o. Что бы сработало, так это объявить make два неявных правила: первое с пререквизитом%.h
, а другое без него. Однако это не так, и в этом нет никакого смысла. - person MadScientist   schedule 30.11.2013