Шаблонные правила - ваш друг в таких ситуациях.Пока все ваши цели соответствуют предсказуемому шаблону - и в этом случае они соответствуют, поскольку все они имеют форму «create foo
from foo.c
» - вы можете написать одно правило шаблона, которое будет использоваться длявсе цели:
OtherOpt=-Wall -g
all: $(patsubst %.c,%,$(wildcard *.c))
%: %.c
gcc $(OtherOpt) -o $@ -lthelibname $<
Теперь вы можете либо просто запустить make
, чтобы создать все ваши приложения, либо make appname
, чтобы создать определенное приложение.Здесь я создал единственное шаблонное правило, которое будет использоваться в любое время, когда вы захотите создать something
из something.c
.Я использовал автоматическую переменную $@
, которая будет расширяться до имени выходных данных, и переменную $<
, которая будет расширяться до имени первой предпосылки, чтобы командная строка была правильной независимо от конкретного приложения.в процессе постройки.Технически вам не нужна строка all
, но я подумал, что вы, вероятно, не хотите, чтобы всегда приходилось вводить названия приложений, которые вы хотите создать.
Кроме того, технически вы, вероятно, можете уйти, не имея любого этого make-файла, потому что в GNU make уже есть встроенное правило шаблона для отношения %: %.c
!Я упоминаю эту опцию только для полноты;лично я предпочитаю делать то, что я показал здесь, потому что это немного более ясно, что происходит.