Операционная система UNIX. Руководство программиста



         

ОСНОВНЫЕ ВОЗМОЖНОСТИ - часть 2


Если make не может автоматически определить действия, которые требуется выполнить, необходим следующий, более длинный файл описаний:

prog : x.o y.o z.o cc x.o y.o z.o -lm -o prog x.o : x.c defs.h cc -c x.c y.o : y.c defs.h cc -c y.c z.o : z.c cc -c z.c

Если ни один из исходных или объектных файлов не был изменен с момента последнего порождения prog и все файлы в наличии, утилита make известит об этом и прекратит работу. Если, однако, файл defs.h отредактировать, x.c и y.c (но не z.c) будут перекомпилированы; затем из новых файлов x.o и y.o и уже существую- щего файла z.o будет заново собрана программа prog. Если изменен лишь файл y.c, только он и перекомпилируется, после чего последует пересборка prog. Если в командной строке make не за- дано имя цели, создается первый упомянутый в описании целевой файл; в противном случае создаются специфицированные целевые файлы. Команда

make x.o

будет перегенерировать x.o, если изменен x.c или defs.h.

Часто в файл описаний включают правила с мнемоническими именами и командами, которые в действительности не порождают файлов с соответствующими именами. Смысл в том, чтобы воспользоваться средствами make'а по генерации файлов и подстановке макросов (информацию о макросах см. в разделе ФАЙЛЫ ОПИСАНИЙ И ПОДСТАНОВКИ). Мнемонические имена играют роль точек входа, при обращении к которым выполняются определенные действия. Так, точка входа save может служить для копирования определенной совокупности файлов, а точка входа clean - для удаления ненужных промежуточных файлов.

Если после выполнения таких команд файл существует, то для того, чтобы принимать последующие решения, используется время его последней модификации; если же он не существует, используется текущее время.

Еще один полезный прием состоит в том, что при необходимости отслеживать только время выполнения определенных действий целесообразно завести пустой файл, который будет использоваться только как носитель времени последней модификации.

Утилита make использует простой механизм макросов для выполнения подстановок в строках зависимостей и цепочках команд. Макрос можно либо задать аргументами командной строки, либо включить в файл описаний. В обоих случаях макроопределение состоит из имени, за которым следует знак равенства (=), а затем то, что макрос обозначает. При обращении к макросу перед его именем указывается знак $. Имена макросов, состоящие более чем из одного символа, должны заключаться в скобки. Ниже приводятся примеры корректных обращений к макросам:




Содержание  Назад  Вперед