Подразумеваемые правила
Для того, чтобы задать информацию о подразумеваемых зависимостях и соответствующих им командах, утилита make использует таблицу суффиксов и набор правил трансформации. По умолчанию список суффиксов выглядит так:
.o | объектный файл |
.c | исходный C-файл |
.c~ | исходный SCCS C-файл |
.f | исходный f77-файл |
.f~ | исходный SCCS f77-файл |
.s | исходный файл на языке ассемблера |
.s~ | исходный SCCS-файл на языке ассемблера |
.y | исходная yacc-грамматика |
.y~ | исходная SCCS yacc-грамматика |
.l | исходная lex-спецификация |
.l~ | исходный SCCS lex-спецификация |
.h | включаемый файл |
.h~ | включаемый SCCS-файл |
.sh | командный файл |
.sh~ | командный SCCS-файл |
Следующий рисунок содержит сводку подразумеваемых путей трансформации. Если имеется два пути, соединяющих определенную пару суффиксов, более длинный путь используется только в тех случаях, когда промежуточный файл существует либо упоминается в описании.
Если требуется файл x.o, а в описании или каталоге найден файл x.c, x.c будет откомпилирован. Если, кроме того, имеется файл x.l, он будет обработан lex'ом, после чего будет откомпилирован результат обработки. Однако, если файл x.c отсутствует, но есть x.l, make воспользуется правилом прямой трансформации и отбросит промежуточный C-файл.
Можно изменить имена некоторых используемых по умолчанию компиляторов, а также опции, с которыми компиляторы вызываются. Для этого предусмотрены макросы с определенными именами. Именам компиляторов соответствуют макросы AS, CC, F77, YACC, LEX. Команда
make CC=newcc
будет приводить к использованию вместо стандартного C-компилятора команды newcc. Чтобы компиляторы запускались с дополнительными опциями, можно устанавливать макросы ASFLAGS, CFLAGS, F77FLAGS, YFLAGS и LFLAGS. Так, вызов
make "CFLAGS=-g"
заставляет команду cc(1) включать в файл отладочную информацию.