Даже относительно небольшие программные системы могут потребовать сложных
последовательностей инструкций для трансляции их из исходных текстов в
исполняемый файл. Кроме того, поскольку трансляция занимает достаточно много
времени, а системы поставляются обычно в виде отдельно транслируемых частей,
было бы удобно экономить время, обновляя только те части программ, исходные
тексты которых изменились со времени последней компиляции. Однако,
отслеживание и использование этой информации само по себе является
сложной, подверженной ошибкам задачей, особенно если делать это вручную.
Утилита UNIX make является простым и наиболее общим решением данной
проблемы. В качестве ввода она принимает описание взаимных зависимостей над
множеством исходных файлов, а также команды, необходимые для их компиляции. Это
описание называется make-файлом. Утилита проверяет ``возраст''
соответствующих файлов, и выполняет все необходимые команды в соответствии с
описанием. Для большего удобства она поддерживает несколько стандартных
действий и зависимостей по умолчанию, чтобы не описывать их лишний раз.
Существует несколько диалектов make, как среди версий UNIX/Linux,
так и в других операционных системх для ПК. Здесь будет описана версия gmake
(GNU make).