Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подбельский Фомин_Программирование на языке СИ_...doc
Скачиваний:
235
Добавлен:
10.08.2019
Размер:
53.81 Mб
Скачать

Формат команды make.

Формат команды make. Команда make имеет следующий формат:

make [-f makefile][ключu][uмeнa][мaкpo_onpeдeлeнuя]

Квадратные скобки, выделяющие параметры, означают их необязательность. Параметры в команде отделяются друг от друга пробелами.

Первый параметр с ключом -f задает имя файла зависимостей модулей, если это имя отлично от makefile или Makefile.

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

- вывести в стандартный поток вывода полный список зависимостей модулей;

-i - игнорировать коды возврата выполненных команд (позволяет отладить сложный make-файл);

-n - вывести в стандартный поток вывода строки с командами UNIX, не выполняя их.

Параметр имена позволяет задавать имена целевых файлов.

Коротко остановимся на некоторых возможностях команды make, которые не используются в нашем примере.

Макроопределения.

Макроопределения. Команда make позволяет использовать при записи спецификаций взаимозависимостей макроопределения. Это дает возможность добиться большей наглядности файла описаний взаимозависимостей и использовать один и тот же файл описаний для различных имен целевых файлов и файлов, от которых зависит целевой файл.

Макроопределения записываются в соответствии со следующим форматом:

имя_макроса = значение

где имя_макроса - имя макроса команды make;

значение - строка символов, которая подставляется вместо конструкции $(имя_макроса) при ее использовании в строках файла взаимозависимостей. Пример макроопределения:

После такого макроопределения контекст вида $(СС) будет заменен в строках make-файла на ее.

Введем в качестве первой строки в приведенный выше файл описаний взаимозависимостей для целевого файла tree следующее макроопределение:

Тогда позже в том же файле для указания объектных модулей, перечисленных справа от знака равенства, можно применять конструкцию $(OBJECTS).

Теперь файл взаимозависимостей для программы сортировки на основе бинарного дерева будет выглядеть так:

Встроенные правила.

Встроенные правила. В процессе выполнения команда make использует набор так называемых встроенных правил. Одним из подмножеств этого набора являются правила автоматического установления взаимосвязей между файлами по суффиксам их имен. Например, когда в команде make в качестве параметра задано имя файла с суффиксом '.с', автоматически выполняется вызов компилятора языка Си, который строит исполняемый модуль из исходного модуля, находящегося в заданном файле. Таблицу встроенных правил команды make, соответствующих конкретной реализации UNIX, можно найти в документации по операционной системе. Здесь стандартные встроенные правила мы рассматривать не будем.

Программист может изменить встроенное правило, для чего новый вариант правила необходимо включить в файл описаний зависимостей, т.е. во входные данные для make.

Простейшее правило, описывающее процедуру подготовки исполняемого модуля из исходного модуля (расширение имени 'с', суффикс имени '.с'), будет выглядеть так:

где $@ - внутренний макрос команды make, предназначенный для спецификации полного имени целевого файла;

$* - внутренний макрос, определяющий префикс имени файла.

Это правило, включенное в файл описаний зависимостей модулей, заменит внутреннее правило команды make для суффикса '.с'

Если теперь ввести команду make с указанием имени целевого файла (исполняемой программы)

то исходный файл prog.c будет скомпилирован, а исполняемый модуль получит имя prog.

С помощью команды make может быть решено множество задач, связанных с программированием как на языках высокого уровня, так и на командных языках (например, на командном языке UNIX - csh), однако основное ее применение - учет взаимозависимостей между исходными текстами модулей в больших программных комплексах.