Как действительно делает, знают который файлы обновить

Я попробовал Дракона несколько лет назад, и это был кошмар слов, из которых mish-делают-пюре, и фраз - не рекомендуемый. Я понимаю, что это была лучшая вещь, идущая в то время, таким образом, я не оптимистичен.

Как такой же больной, рекомендации были бы:

  1. Находят задание, которое требует как можно меньше OT
  2. Попытка множество клавиатур. По моему опыту, работа над полным рабочим днем ноутбука работала лучше всего.
  3. Запускают программу низко-умеренного подъема веса напряжения.
31
задан neuromancer 24 November 2009 в 12:15
поделиться

4 ответа

Он проверяет метаинформацию о дате изменения файловой системы.

См., Например, справочную страницу stat () и член st_mtime структуры struct stat .

Она имеет встроенные правила, которые говорят ей, что (например) файл .o необходимо повторно сгенерировать, если соответствующий файл .c изменился; в разделе руководства по синтаксису правил говорится:

Критерий устаревания: указаны с точки зрения предварительные требования, которые состоят из файла имена разделены пробелами. (Подстановочные знаки и члены архива (см. Архивы) здесь тоже разрешено.) Цель вне дата, если она не существует или если она есть старше любого из предварительных условий (по сравнению с последней модификацией раз).

28
ответ дан 27 November 2019 в 22:11
поделиться

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, чтобы ваши часы были установлены правильно.

14
ответ дан 27 November 2019 в 22:11
поделиться

Он проверяет, не является ли отметка даты / времени в исходном файле более поздней, чем в соответствующем промежуточном файле (или, возможно, в выходном файле - это был пока разобрался с make файлами). Если это так, то файл необходимо заполнить. Затем это приведет к связыванию последнего исполняемого файла.

3
ответ дан 27 November 2019 в 22:11
поделиться

Make намного сложнее, чем кажется на первый взгляд. У него есть механизм вывода со сложным алгоритмом; в сочетании с вашими данными конфигурации make представляет собой тип программы + базы данных, известной как экспертная система .

В любом случае, чтобы ответить на ваш вопрос, проверьте make ] действительно немного сложно, потому что может быть несколько цепочек предварительных условий, и эти цепочки предварительных условий могут сами быть сшиты произвольным образом.

Итак, ответ на вопрос « откуда он знает? "is:

Вы правы, make не делает ' Обычно не оставляют файлы cookie или другие файлы отслеживания состояния. (Иногда некоторые Makefile сами создают файлы cookie с отметками времени, но это редко.) Но это не имеет значения, в конце концов, последний запуск Make может быть неудачным. Он просто сравнивает даты в целевых файлах, которые он создает, с датами в исходных файлах. Он заботится только о том, обновлены ли целевые объекты, обычно он не учитывает время последнего выполнения make .

Он просто сравнивает даты в целевых файлах, которые он создает, с датами в исходных файлах. Его заботит только актуальность целевых объектов, обычно он не учитывает время последнего выполнения make .

Он просто сравнивает даты в целевых файлах, которые он создает, с датами в исходных файлах. Он заботится только о том, обновлены ли целевые объекты, обычно он не учитывает время последнего выполнения make .

14
ответ дан 27 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: