Использование макроопределений позволяет отложить определение компонент описания работы MAKE до момента запуска. Они могут располагаться как в файле описаний, так и в командной строке.
Существуют две формы макроопределений:
<имя>=<значение>
или
$(<имя>)
Первая форма задает значение символическому параметру, который может использоваться для определения компонент описания. Допустимо любое число пробелов между элементом <имя> и символом = и между этим символом и элементом<значение>, которые игнорируются. Пробелы, специфицированные после <значение>, рассматриваются как часть значения. Пробелы как часть значения в командной строке должны заключаться в двойные апострофы ".
В файле описаний MAKE каждое макроопределение должно занимать отдельную строку.
Одно и то же имя может быть определено в нескольких местах. Подстановка значений осуществляется в соответствии со следующим списком (в порядке убывания приоритетов):
u Из командой строки.
u Из файла описаний MAKE.
u Из текущего окружения (например, ключевые слова DOS).
Вторая форма макроопределений использует значение, определенное в другом месте. Элемент <имя> приводится к изображению на регистре заглавных букв.
Допускается вложенность макроопределений, когда внутреннее макроопределение определяется через внешнее. При этом следует избегать рекурсии.
Пример рекурсивной вложенности макроопределений:
A=$(B)
B=$(A)
Существуют 3 специальные макропеременные, имеющие следующие фиксированные значения:
u $* — часть имени (без расширения) целевого файла;
u $@ — полное имя целевого файла;
u $** — полный список требуемых файлов.
Эти макропеременные не требуют предварительного описания и могут использоваться в файле описаний MAKE.