Шаблонные правила
Шаблонные правила (implicit rules или pattern rules) - это правила, которые могут быть применены к целой группе файлов. В этом их отличие от обычных правил - описывающих отношения между конкретными файлами.
Традиционные реализации make поддерживают так называемую "суффиксную" форму записи шаблонных правил: ..: ... Например, следующее правило говорит о том, что все файлы с расширением "o" зависят от соответствующих файлов с расширением "cpp": .cpp.o: gcc -c $^ Обратите внимание на использование автоматической переменной $^ для передачи компилятору имени файла-зависимости. Поскольку шаблонное правило может применяться к разным файлам, использование автоматических переменных - это единственный способ узнать для каких файлов сейчас задействуется правило.
Шаблонные правила позволяют упростить make-файл и сделать его более универсальным. Рассмотрим простой проектный файл:
iEdit: main.o Editor.o TextLine.o gcc $^ -o $@
main.o: main.cpp gcc -c $^
Editor.o: Editor.cpp gcc -c $^
TextLine.o: TextLine.cpp gcc -c $^
Все исходные тексты программы обрабатываются одинаково - для них вызывается компилятор GCC. С использованием шаблонных правил, этот пример можно переписать так:
iEdit: main.o Editor.o TextLine.o gcc $^ -o $@
.cpp.o: gcc -c $^
Когда make ищет в файле проекта правило, описывающее способ достижения искомой цели (см. главу
3.2.2. "Достижение цели", функция НайтиПравило), то в расчет принимаются и шаблонные правила. Для каждого из них проверяется - нельзя ли задействовать это правило для достижения искомой цели.