Сопровождение программ: make
Если программный продукт велик, содержит много исходных, объектных и исполняемых модулей, задача его сопровождения и модификации может быть облегчена утилитой make, которая позволяет автоматизировать все рутинные операции по перетрансляции и перелинкированию всех или части модулей при внесении в них изменений.
Утилита make работает с файлом Makefile, в который записывается необходимая информация о всех файлах программы и связях между ними.
Пример:
$ cat Makefile FILES = test.f check.f prove.f OBJECTS = test.o check.o prove.o test: $ {OBJECTS} ld -o test/lib/frt0.o ${OBJECTS} -lF77 $
Как видно из примера, в файле Makefile помещаются макроопределения, имеющие вид:
строка1 = строка2
и правила, имеющие вид:
конечный файл : исходные файлы команда
Первая строка правила называется зависимостью. Зависимость указывает, что конечный файл является результатом работы команды, указанной во второй строке правила, над исходными файлами. Внутри зависимости можно ссылаться на макроопределения в форме $(строка1).
Подготовив такой Makefile, можно модифицировать программу test одним вызовом команды make, например:
$ make fc -c test.f fc -c check.f fc -c prove.f ld -o test/lib/frt0.o check.o prove.o -lF77 $
Команда выполняется только в том случае, если дата создания или модификации конечного файла меньше, чем соответствующая дата хотя бы одного исходного файла (то есть если конечный файл устарел).
Возможно изменить только часть программы, например:
$ make prove.o fc -c prove.f $
В данном случае утилита make по умолчанию "знает", что файл prove.o зависит от файла prove.f и реализация этой зависимости есть указанный вызов компилятора.
Полезный ключ -n утилиты make позволяет не выполняя предписанных действий предварительно посмотреть, что было бы выполнено, если бы ключ не был подан.
Подробнее о make можно узнать из руководства по команде make и книг [7,8].