GCC - The Complete Reference (537669), страница 60
Текст из файла (страница 60)
б представляет собой имя, определенное в самом утилите та)се, а переменная ненвент определена в самом п)а)(е-файле с помощью примерно такой строки: НЕЕВЕВТ=Нет)зьчоке 268 Часть!1Ь Внутренняя структура и окружение Результат обработки пта)ге-файла будет выглядеть следующим образом: есЬо НОМЕ ьв /Ьоше/агкиег номе ьв !Ьоае/агедаг есЬо СОМРХЬЕ.г 1в г77 -с СОМР1ЬЕ.Й ьв Е77 -с есдо НЕВВЕНт 1в Негвьзгоге НЕЕВЕЕт ьв Негььзгоге Каждый раз команда есЬо выводится в начале выводимой ею строки, поскольку по умолчанию для утилиты тва)ке установлено, что команда перед выполнением отображается на экране.
Правила суффиксов В таКе-файле можно назначать правила, которые будут распознавать типы Файлов по их суффиксам (расширениям) и автоматически транслировать один тип в другой. В следующем примере приведен гпа)ге-файл, который распознает суффиксы и определяет пару команд, которые транслируют файл с одним суффиксом в новый файл с назначенным ему другим суффиксом: а11: Ье11о.о Ье11о.в Ье11о.о: Ье11о.с Ье11о.в: Ье11о.с .ВПРР1ХЕБ: .о .с .в .с.о: рос -с Б< .с.вю дсс -Б Б< Приведенный компоновочный сценарий предназначен для создания двух целей: ье11о.
о и ье11о. в. Поскольку правила выработки этих целевых файлов не устанавливают команды, то распознаются три суффикса: . с, . о и . в. Правило для суффиксов . с и . о преобразовывает файл с суффиксом . с в файл с суффиксом .о. А правило для . с и . в — файл с суффиксом . с в файл с суффиксом . в. Специальный макрос Б< представляет собой ссылку на имя файла, используемого для создания цели. Результат выполнения рассмотренного тпа)ге-файла будет тем же, что и результат выполнения следующего компоновочного сценария: Ье11о.о: Ье11о.с рос -с Ье11а.с Ье11о.в: Ье11о.с ясс -Б Ье11о.с Правила суффиксов, как правило, действуют сложнее, чем показано в этом примере, тем не менее, их не приходится писать вручную.
В утилиту ма)ке встроено большое количество правил суффиксов, которых достаточно для того, чтобы от разработчика требовалось только указать команду, Глава (4. Утилиты п)аке и Ац(осоп( 269 Просмотр определений Существуют опции командной строки, которые позволяют просмотреть полный список макросов и определений правил суффиксов, поддерживаемых утилитой аа)се. Опция -р не мешает нормальному считыванию и выполнению гпаКе-файла, но при этом будут выводиться все назначенные макросы и действующие правила суффиксов. Для просмотра всего списка введите следующую команду: 3 паке -р ) аоге Для просмотра того же списка, но с запрещением на выполнение команд сценария выполните следующую команду: ь.папе -р -(( ( аоге При необходимости просмотра только встроенных определений утилиты аа)ге без вывода определений локального таКе-файла можно указать утилите аа)ге пустой файл для считывания: а аа)пе -р -г Уйет/пп11 ( аоге Как написать ваке-файл Если вы новичок в написании гпаКе-файлов, то лучше всего скопировать существующий файл и изменить его в соответствии со своими намерениями.
После несксльких правок вы поймете общий принцип их построения. Если необходимо изучить утилиту ай)ее в объеме, достаточном для написания таКе-файлов с нуля, придется потратить некоторое время на исследования и эксперименты. На самом деле это не гак сложно, как может показаться. Просто имеются некоторые особенности, которые могут сбивать с толку поначалу, пока вы не научитесь все делать правильно. Можно попробовать написать шаблон таКе-файла, который будет использоваться в качестве заготовки при написании каждого нового таКе-файла. Но, к сожалению, лхя сценариев компоновки нет универсальной формы, которая бы подошла для любого случая. Ниже приводится пример обобщенного таКе-файла, который компилирует две программы, написанные на языке С, и компонует их в готовый к запуску выполнимый файл; сс=ясс увоавыпоийу )пе11о Суъхпя=-Иа11 пп.: Ф(рдоов) 'поийу: )зоийу.с Ье) ьо: )те11о.с Ф(СС) Ф(оуъкоя) )пе11о.с -о )зе11о с1еап: га -г *.о га -г *.БО га -г *.а га -г Ф(ваоав) 270 Часть 1И.
Внутренняя структура и окружение Переменной сс присваивается значение доо, а переменной свгйьав — значение -УГа11. Список имен целей хранится в переменной виоаз. Представленный та1гефайл компилирует две программы одним и тем же способом. Но для одной из них используется встроенная команда, а для другой команда указывается явно; -Иа11 поеду.с -о поеду дсс -Юа11 Ье11о.с -о Ие11о Существует предопределенная "чистящая" цель о1еап, которую можно вызвать в любой момент лля удаления всех промежуточных файлов, созданных при выполнении компоновочного сценария. Текущий набор команд не оставляет на диске файлы .о, .
ео или . а, поэтому здесь чистка не нужна. Однако гла1ге-файлы растут по мере развития проекта и генерируют все возможные типы промежуточных файлов. В таком случае без удаления временных файлов не обойтись. По умолчанию утилита злаке пытается построить первую цель, найденную в гпайе-файле, но ее можно попросить построить любую цель, явно указав ее имя в командной строке, что показывает следующий пример; 3 алке с1еап Некоторую помощь можно получить и от компилятора. В главе 18 приведены примеры использования компилятора для формирования списка зависимостей, помешаемого в таКе-файл. Опции утилиты ва1е Таблица 14.1.
Опции командной проки утилиты ваке Указывает не перекомпоновывать файл независимо от его возраста и не перекомпоновывать другие файлы, основанные на зависимостях от этого файла. --алелеа-о1д=яшллале Предполагает, что указанный файл является новым. Также и все файлы, зависящие от указанного файла, должны быть перекомпонованы. Выполняет переход в указанный каталог перед поиском файлов для определения зависимостей. То же, что и -с. --алллее-пен 111аплле -С д1ллоеолу --дзклоьоку=дзллоеоху То же, что и -дльля а, Версий утилиты злаке столько же, сколько и версий 1Лч11Х.
Все они, по своей сути, одинаковы, но могут отличаться отдельными свойствами и характеристиками. Версия ОТч1О утилиты атаке привлекает тем, что она свободно распространяется а форме исходного кода. Она, несмотря на то, что содержит собственные расширения, пожалуй, лучше всего будет работать с компилятором ОСС в любой системе. В частности, если компилятор ОСС планируется создавать из исходного кода, то имеет смысл установить пакет Ь1пц111з, включающий пыЖе и несколько других утилит. Утилиты пакета Ьгпцгйз гарантированно совместимы с ОСС. Многие опции командной строки общие для всех версий утилиты тла1се.
Опции, поддерживаемые утилитой вга1се версии О1ч111, перечислены в таблице 14.1. Глава 24. Утилиты гпайе и Дц2осоп1 27 21 --аеьпдП 42едв] -агу-гпп епг1гопхепк-о геггсаев -1 112епете — 112есу12епете — Ье2р -1 аггеосогу — 1дпоге-еггогв -1пстиае-а1г д1гесгогу -5 Гпотлег) — 5оЬв1 лпхюег) --тпвс-рг1п -веер-до1пд Выводит информацию об обработке в форме, которую можно использовать для отладки ошибок гпаке-файла.
Если флаги не указаны, то выводится базовая отладочная информация. Значение параметра 12вд МОжет быть любой комбинацией следующих букв: в — выводит все типы отладочной информации. Зта опция выводит большие описания результатов. ь — выводит базовую отладочную информацию, включая список устаревших целей и данные об успешности выполнения команд.
1 — выводит информацию о поиске неявных правил для каждой цели и также информацию, выводимую при использовании опции ь. б — выводит информацию о вызове подкоманд. в — другие опции при построении компоновочных файлов с помощью текущего целевого таКе-файла блокируются, но этот флаг включает другие флаги, используемые при генерации самого целевого таКе-файла.
у — выводит ту же информацию, что для опции ь, и дополнительно информацию о целях, которые не требуют выполнения команд. Холостой запуск. Указывает не выполнять никаких команд. Зта опция выводит все команды, которые были бы выполнены в случае, если бы это был не холостой запуск. Тоже, что и --ептг1гоптепг-очегг1аев. Переменные среды замещают переменные, определенные в таКе-файле. ТО жв, Чтс И с-412Е. Использует указанный файл в качестве гпаке-файла и отменяет поиск файла с именем веке112е или теке112е.
Выводит этот перечень опций. Выводит этот перечень опций. То же, что и --адпоге-еггогв, То же, что и --1по2пае-а1г. В нормальном режиме обработка завершается при первой неудаче компоновки цели, но при этой опции обработка не останавливается и переходит к созданию следующей цели. Поиск включаемых компоновщиком гпаке-файлов будет производиться в укаэанном каталоге.
То же, что и --зоьв. Указывает количество команд, которые могут выполняться одновременно. Если число не указано, утилита теве будет запускать максимально возможное количество команд. То же, что и --агу-гпп. То же, что и --веер-доапд. Указывает после возникновения ошибки обработать столько целей, сколько возможно. Файлы, имеющие зависимости от цели, которая не была создана, также создаваться не будут„но ошибка в одной зависимости не исключает возможность обработки остальных. 272 Часть П!. Внутренняя структура и окружение -1 [пихьзег] --1ааа-атегаде[ питЬег] --тпвхеее]е г11епате --теж-1аво[=пшяЬег] --пеи-111е=г11епете --по-Ьи11с1п-ги1ев — па-Ьи11С[п-твг1вЬ1ев --па-веер-да1пд --па-рг1пс-ахгессагу -а г[1епете --а1Й-г11е=г11впете --рг[пс-Овса-Ьвве --рг1пс-акгессагу -ЕнеС --гесап --вх1епс --всар --СаисЬ то же, что и --теж-1ааа.
то же, что и - -твх-1ааа. То же, что и --К[1е. Новые команды не будут запускаться на выполнение, если уже запущена по крайней мере одна команда, и средняя загрузка системы выше, чем указанное значение (число с плавающей точкой). Если число не указано, то максимальная загрузка не ограничена. Та же, что и --агу-тип. То же, что и --певшие-пеи. Отменяет встроенные правила и определения суффиксов, возможность назначения пользователем собственных правил и определений при этом остается. Исключает использование встроенных переменных, возможность назначения пользователем собственных переменных при этом остается.
Эта опция также автоматически устанавливает опцию - -па-ьи11с1п-ги1ев. То же, что и --есор. Отменяет действие опции --рг1пс-а1гессагу. То же, что и --пееите-а16. То же, что и --вввиим-а16. то же, что и --рг1пс-авив-ьаве. Выводит действующие правила и значения переменных. Эти данные представляют собой комбинацию предопределенных значений и содержимого глана-файла. Выводит сообщение, содержащее имя рабочего каталога до и после выполнения итаке-файла. Эта опция имеет смысл только в том случае, когда таКе-файлы вызывают друг друга.
Указывает не выполнять команды и не выводить никаких результатов кроме кода завершения. Код завершения 0 говорит о том, что все цели новые и при нормальном запуске таКе-файла компиляция не проводилась бы. Код завершения! указывает, что одну или несколько целей нужно перекомпилировать. Код завершения 2 говорит о наличии критической ошибки. То же, что и --в11епс. То же, что и --по-Ьих1С1п-ги1ев. То же, что и --по-Ьи11с[п-твг1вЬ1ев. То же, что и --агу-тип. То же, что и --в11епг.. То же, что и --вг.ар.
Подавляет обычный вывод строки команды при ее выполнении. Отменяет действие опции --кеер-до1пд. То же, что и --спись. Обновляет атрибуты времени целевых файлов для их соответствия последней версии, но при этом не выполняет команд для создания их новых версий. Глава 14. Утилиты ваКе и АцгосопГ 273 Овивввие Выводит информацию о версии утилиты ваке и завершает выполнение утилиты. -текв1ол Выводит информацию о версии и завершает выполнение утилиты.