Вопрос: для foo.c
, a .c
файл, используемый в другом месте в более крупном проекте, должен ли целевой объект компиляции объекта foo.o
в списке Makefile foo.h
в качестве зависимости?При использовании make, если объектный файл зависит от собственного файла заголовка?
foo.o: foo.c foo.h
$(CC) $(CFLAGS) -c -o foo.o foo.c
Это просто вопрос согласия?
Это мое мышление до сих пор, и удар в ответ:
Похоже, что любое законное изменение в foo.h
потребует внесения соответствующих изменений в foo.c
. Таким образом, нет необходимости перечислять foo.h
в качестве зависимости. Однако это, вероятно, хорошая идея, так как мы хотим, чтобы вас немедленно уведомили (с помощью перекомпиляции), если изменение foo.h
сломало что-либо в foo.c
.
от того, что я знаю, если вы определяете правило something.o make будет автоматически строить something.c с something.h как зависимость, вы можете проверить его, хотя. – cerkiewny
Существуют различные изменения в заголовке, которые требуют восстановления исходного файла, но не требуют изменения кода. например обновление элементов ## define или re-ordering структуры. Обработка заголовка в качестве зависимости позволяет автоматически перестраивать соответствующий код. – simonc
Gnu make неявно добавляет соответствующие файлы '.h' в зависимости. Он является частью списка [суффикс по умолчанию] (http://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html). Вы должны будете перенести это правило явно, если вы не хотите, чтобы он был частью зависимостей. – Lucas