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

       

Исполняемые команды


Если целевой файл должен быть создан, выполняется последовательность команд. Обычно каждая командная строка распечатывается и затем, после подстановки макросов, для ее выполнения запускается очередной экземпляр shell'а. Печать может быть подавлена в режиме "молчания" (опция -s утилиты make) или в том случае, если командная строка в файле описаний начинается со знака @. make обычно прекращает работу, если какая-либо команда сигнализирует об ошибке, возвращая ненулевой код завершения. Ошибки игнорируются, если в командной строке make'а указана опция -i, или если в файле описаний указано фиктивное целевое имя .IGNORE, или если командная строка в файле описаний начинается со знака минус. Если известно, что программа возвращает бессодержательное значение, полезно указывать минус перед строкой, ее запускающей. Поскольку каждая командная строка передается отдельному экземпляру shell'а, при использовании собственных команд shell'а [например, cd(1)] надо проявлять осторожность, потому что они имеют смысл только в пределах одного shell-процесса. Перед выполнением следующей строки результаты выполнения этих команд утрачиваются.

Перед вызовом любой команды устанавливаются некоторые встроенные макросы. Макрос $@ устанавливается равным полному имени текущего целевого файла. Он вычисляется только для явно указанных зависимостей. Макрос $? устанавливается равным цепочке имен файлов, которые оказались более свежими, чем целевой; он также вычисляется только при обработке явных правил make-файла. Если команда порождена неявным правилом, макрос $< равен имени файла, вызвавшего действие; макрос $* - префикс имени, общий для текущего файла и файла из строки зависимостей. Если файл должен быть получен, но нет явных команд или встроенных правил, используются команды, сопоставленные фиктивному целевому имени .DEFAULT. Если такого имени нет, make выдает сообщение и прекращает работу.

Кроме того, в файле описаний можно использовать следующие связанные с упомянутыми выше макросы: $(@D), $(@F), $(*D), $(*F), $(<D) и $(<F) (см. ниже).



Содержание раздела