Мой вопрос и проблема в том, что, когда замечено это изменение метки времени в Y, происходит перезапуск, чтобы включить изменения.
GNU make считывает временные метки файлов один раз при запуске. Если вы не вызовете его явно (например, вызовом make или $ MAKE из make-файла), он не будет перепроверять временные метки после выполнения команд.
Итак, как будет обрабатываться файл при изменении его зависимости.
Все файлы обрабатываются одинаково; make просто имеет несколько встроенных правил для некоторых типов файлов. Зависимости обрабатываются одинаково для всех типов файлов.
Похоже, что ваш включенный файл .d создает зависимость от исходного файла (ов), а не от целевого файла. Вы можете убедиться в этом, распечатав правила, которые использует make с make -p
.
Я буду использовать файлы c в качестве примера, поскольку вы уже знаете, как должны работать их зависимости. Предположим, у вас есть файл foo.c (исходный код), который компилируется в foo.o (целевой), и чьи зависимости указаны в foo.d. Для этого примера, скажем, если изменится bar.h или baz.h, мы хотим перестроить foo.o.
foo.d должен содержать что-то вроде:
foo.o : bar.h baz.h
И ваш makefile будет читать
%.o:%.c
$(CC) -c $< -o $@
include foo.d
Ваши симптомы звучат так, словно у вас есть файл foo.d, содержащий:
foo.c: bar.h baz.h
^
Или что-то совершенно не связанное с левой стороны, такое, что make не видит зависимости от foo.o. Если вы запустите make -p
и выполните поиск foo.o в выходных данных, вы увидите, что, по мнению make, зависит от содержимого вашего make-файла.