Я попробовал Дракона несколько лет назад, и это был кошмар слов, из которых mish-делают-пюре, и фраз - не рекомендуемый. Я понимаю, что это была лучшая вещь, идущая в то время, таким образом, я не оптимистичен.
Как такой же больной, рекомендации были бы:
Он проверяет метаинформацию о дате изменения файловой системы.
См., Например, справочную страницу stat () и член st_mtime
структуры struct stat
.
Она имеет встроенные правила, которые говорят ей, что (например) файл .o необходимо повторно сгенерировать, если соответствующий файл .c изменился; в разделе руководства по синтаксису правил говорится:
Критерий устаревания: указаны с точки зрения предварительные требования, которые состоят из файла имена разделены пробелами. (Подстановочные знаки и члены архива (см. Архивы) здесь тоже разрешено.) Цель вне дата, если она не существует или если она есть старше любого из предварительных условий (по сравнению с последней модификацией раз).
make
определяет, нужно ли перестраивать целевой файл X, проверяя, не старше ли время его модификации (как записано в файловой системе), чем любая из его зависимостей. Например, если у вас есть правило make вроде:
foo.o: foo.c foo.h common.h
, то он знает, что ему нужно перестроить foo.o
, если какой-либо из foo.c
, foo.h
или common.h
имеют более новое время модификации, чем foo.o
. Это означает, что выполнение touch common.h
приведет к принудительному использованию foo. o
будет перестроен при следующей сборке.
Это означает, что make
может быть запутан, если время модификации ненадежно - например, если ваши системные часы перескочили назад, или если вы хранение ваших файлов в определенных сетевых файловых системах и доступ к ним нескольких клиентов (особенно, если часы на различных машинах в вашей сети не синхронизированы). Если вы используете make
с файлами, распределенными по сети, обычно рекомендуется запускать NTP, чтобы ваши часы были установлены правильно.
make
с файлами, распределенными по сети, обычно рекомендуется запускать NTP, чтобы ваши часы были установлены правильно. или если вы храните свои файлы в определенных сетевых файловых системах и у вас есть доступ к нескольким клиентам (особенно, если часы на разных машинах в вашей сети не синхронизированы). Если вы используете make
с файлами, распределенными по сети, обычно рекомендуется запускать NTP, чтобы ваши часы были установлены правильно. Он проверяет, не является ли отметка даты / времени в исходном файле более поздней, чем в соответствующем промежуточном файле (или, возможно, в выходном файле - это был пока разобрался с make файлами). Если это так, то файл необходимо заполнить. Затем это приведет к связыванию последнего исполняемого файла.
Make
намного сложнее, чем кажется на первый взгляд. У него есть механизм вывода со сложным алгоритмом; в сочетании с вашими данными конфигурации make
представляет собой тип программы + базы данных, известной как экспертная система .
В любом случае, чтобы ответить на ваш вопрос, проверьте make
] действительно немного сложно, потому что может быть несколько цепочек предварительных условий, и эти цепочки предварительных условий могут сами быть сшиты произвольным образом.
Итак, ответ на вопрос « откуда он знает? "is:
stat (2)
файлы для получения времени их модификации Вы правы, make
не делает ' Обычно не оставляют файлы cookie или другие файлы отслеживания состояния. (Иногда некоторые Makefile сами создают файлы cookie с отметками времени, но это редко.) Но это не имеет значения, в конце концов, последний запуск Make может быть неудачным. Он просто сравнивает даты в целевых файлах, которые он создает, с датами в исходных файлах. Он заботится только о том, обновлены ли целевые объекты, обычно он не учитывает время последнего выполнения make
.
make
. Он просто сравнивает даты в целевых файлах, которые он создает, с датами в исходных файлах. Он заботится только о том, обновлены ли целевые объекты, обычно он не учитывает время последнего выполнения make
.