Где программа make хранит информацию? - PullRequest
1 голос
/ 05 ноября 2011

Как точно make знает, был ли файл изменен или нет, для запуска определенных правил? Эта информация должна быть в каком-то месте, поэтому где-то хранится файл с метками времени из файлов?

Существует много make программ, поэтому я не уверен, что принцип проверки зависимостей одинаков для всех из них. Если они сильно отличаются, меня больше всего интересует GNU Make; хотя было бы хорошо узнать о любых различиях.

Ответы [ 4 ]

4 голосов
/ 05 ноября 2011

Проверяет временные метки входов и выходов. Например, если .o старше, чем .c, предполагается, что вы его отредактировали, и .o необходимо переделать.

2 голосов
/ 05 ноября 2011

Simple. Сравните временную метку ON исходного файла (дата изменения, дата создания и т. Д. Хранятся как часть информации о файле) и выходного файла (исполняемый файл или объектный файл). Если исходный файл «новее», перекомпилируйте.

Иногда, когда в моих исходных файлах есть неправильные метки времени, например Я редактирую их на компьютере, на котором в будущем была установлена ​​дата, затем просто touch * мои исходные файлы, чтобы изменить метку времени, и это работает.

1 голос
/ 05 ноября 2011

Считывает метки времени в реальном времени из файловой системы.

0 голосов
/ 16 апреля 2013

Традиционный способ сделать это используется makepp , только если он запрашивается через build_check target_newer. Это связано с тем, что сетевые файловые системы не всегда согласовывают временные метки и могут изменяться при копировании файла. Также файловые системы с точностью до секунды (FAT и 2 с) по-прежнему широко распространены. Многое может произойти в это время в наше время.

Поэтому makepp вычисляет интеллектуальную подпись содержимого (исключая комментарии и неважные пробелы, например, для языка языков C). Затем это сохраняется в .makepp/yoursourcename.mk и будет взято в следующий раз, чтобы увидеть, изменилось ли что-то существенное. Умные подписи всех зависимостей (которые автоматически обнаруживаются между прочим), а также командная строка и некоторые другие подробности решают, требуется ли перестроение.

Есть еще много чего сделать. Помимо выполнения почти всего, что может сделать GNU make, есть еще много полезных вещей, и вы даже можете расширить свои make-файлы с помощью некоторого программирования на Perl.

...