make
автоматически предоставляет набор правил, которые всегда доступны, даже если Makefile вообще не существует. Спецификации POSIX для make
называют их "правилами по умолчанию", а документация GNU make
называет их "встроенными правилами". Это суффиксные правила или по существу эквивалентные шаблонные правила, которые сопоставляют цели с предварительными условиями и назначают рецепты сборки на основе суффиксов имен файлов, и, следовательно, подходят для многих случаев.
Кроме того, необходимо понимать, что правило make
без рецепт не express, что нигде нет рецепта для цели. Скорее, такое правило «только для предварительных требований» определяет неисключительный список предварительных условий для цели, не обращаясь к рецепту для создания цели. Это позволяет использовать несколько правил для указания предпосылок для цели при условии, что не более одного явного правила определяет рецепт для цели. В частности, он позволяет определить дополнительные предпосылки для целей, рецепты которых предоставляются по умолчанию / встроенными правилами.
Среди правил по умолчанию GNU make
и, по существу, каждая реализация make
, соответствующая POSIX, один для построения .o
файлов из соответствующих .c
файлов, и это правило является тем, которое обеспечивает рецепт в этом случае. GNU предоставляет шаблонное правило, эквивалентное этому для этой цели:
%.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
Это немного отличается от спецификации POSIX, в которой для этой цели $(CPPFLAGS)
исключено из правила по умолчанию, хотя это не имеет значения для цели поставленного вопроса.