Где программа make хранит информацию?

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

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

4 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам