ПРИМЕЧАНИЕ : Инструмент make читает make-файл и проверяет метки времени изменения файлов по обе стороны от символа ':' в правиле.
Пример
В каталоге 'test' присутствуют следующие файлы:
prerit@vvdn105:~/test$ ls
hello hello.c makefile
В make-файле правило определяется следующим образом:
hello:hello.c
cc hello.c -o hello
Теперь предположим, что файл 'hello' является текстовым файлом, содержащим некоторые данные, которые были созданы после файла 'hello.c'. Таким образом, отметка времени модификации (или создания) 'hello' будет новее, чем у 'hello.c'. Поэтому, когда мы вызовем команду 'make hello' из командной строки, она напечатает как:
make: `hello' is up to date.
Теперь откройте файл hello.c и вставьте в него пробелы, которые не влияют на синтаксис или логику кода, затем сохраните и закройте. Теперь отметка времени модификации hello.c новее, чем у 'hello'. Теперь, если вы вызовете 'make hello', он выполнит команды следующим образом:
cc hello.c -o hello
И файл 'hello' (текстовый файл) будет перезаписан новым двоичным файлом 'hello' (результат вышеуказанной команды компиляции).
Если мы используем .PHONY в make-файле следующим образом:
.PHONY:hello
hello:hello.c
cc hello.c -o hello
и затем вызвать 'make hello', он проигнорирует любой файл, присутствующий в pwd 'test', и выполнит команду каждый раз.
Теперь предположим, что у цели 'hello' нет объявленных зависимостей:
hello:
cc hello.c -o hello
и файл 'hello' уже присутствует в pwd 'test', тогда 'make hello' всегда будет отображаться как:
make: `hello' is up to date.