Сейчас я должен признать, что раньше чуть-чуть передернул. Я сказал, что каждая инструкция начинается с имени файла, который нужно создать, затем идет двоеточие, а затем — список файлов, образующих главный. Так вот, команде
Приведу простой пример реального файла
NEWALISES=/usr/sbin/newaliases
PDIR=/etc/postfix
POSTMAP=/usr/local/postfix/sbin/postmap
# Команды
all: $(PDIR)/aliases.pag $(PDTR)/aliases.dir \
$(PDIP)/access.dir $(PDIR)/access.pag reload
reload:
postfix reload
stop:
postfix stop
start:
postfix start
#
# Когда aliases изменится, сгенерировать файлы. pag and.dir
#
$(PDIR)/aliases.pag $(PDIR)/aliases.dir: $(PDIR)/aliases $(NEWALIASES)
#
# Когда access изменится, сгенерировать файлы. pag and.dir
#
$(PDIR)/access.dir $(PDIR)/access.pag: $(PDIR)/access $(POSTMAP) $(PDIR)/access
Теперь я могу отредактировать файл
С помощью команды
push.aliases.done: $(PDIR)/aliases
scp $(PDIR)/aliases server2:$(PDIR)/aliases
touch $@
Мы копируем файл на serveг2 командой
В файлах, имена которых оканчиваются на
Рассмотрим развернутый пример. Имеются два файла, подлежащие индексации после редактирования:
Будьте внимательны, создавая инструкции. Правильно указывайте параметры и применяйте команду touch к файлам
#
# Makefile для server1
#
NEWALISES=/usr/sbin/newaliases
PDIR=/etc/postfix
POSTMAP=/usr/lосаl/postfix/sbin/postmap
#
# "Команды" высокого уровня
#
all: aliases.done access.done reload_if_needed.done push
push: push.done
reload:
postfix reload
stop:
postfix stop
start:
postfix start
reload_if_needed.done: aliases.done access.done
postfix reload
touch reload_if_needed.done
clean:
rm — f \
$(PDIR)/aliases.pag $(PDIR)/aliases.dir \
$(PDIR)/access.dir $(PDIR)/access.pag \
push.aliases.done push.access.done \
reload_if_needed.done
#
# Инструкции для конкретных файлов,
# которым требуется индексация/регенерация
#
# Если aliases изменится, сгенерировать файлы. pag and.dir
aliases.done: $(PDIR)/aliases.pag $(PDIR)/aliases.dir
$(PDIR)/aliases.pag $(PDIR)/aliases.dir: $(PDIR)/aliases $(NEWALIASES)
# Если access изменится, сгенерировать файлы. pag and.dir
access.done: $(PDIR)/access.dir $(PDIR)/access.pag
$(PDIR)/access.dir $(PDIR)/access.pag: $(PDIR)/access $(POSTMAP) $(PDIR)/access
#
# Копирование
#
push.done: push.aliases.done push.access.done
ssh server2 "cd /etc && make"
touch $@
push.aliases.done: aliases.done
scp $(PDIR)/aliases server2:$(PDIR)/aliases
touch $@
push.access.done: access.done
scp $(PDIR)/access server2:$(PDIR)/access
touch $@
Этот
Такой