Уважаемые подписчики! Этот выпуск посвящен стандартному компилятору языка C систем SVR4, cс(1). Перевод выполнен по справочному руководству UnixWare 2.03.
cc - компилятор C
Команда cc - это интерфейс к системе компиляции языка C. Система компиляции состоит из следующих концептуальных стадий: препроцессирование, компиляция, оптимизация, базовое профилирование блоков, ассемблирование и компоновка. Команда cc проверяет введенные опции и суффиксы имен файлов, а затем выполняет необходимые стадии с соответствующими опциями и аргументами.
Команда cc распознает следующие суффиксы имен файлов:
| .c | Файл, содержащий необработанный исходный код на языке C; применяются все стадии. |
| .i | Файл, содержащий обработанный препроцессором код на языке C; применяются все стадии, кроме препроцессирования. |
| .s | Файл, содержащий исходный текст на языке ассемблера; применяются только стадии ассемблирования и компоновки. |
| другой | Файл, содержащий данные, применимые только на стадии компоновки. В эту категорию обычно попадают объектные файлы (.o), архивные библиотеки (.a) и совместно используемые (разделяемые) объектные библиотеки (.so). |
Если опции не указаны, команда cc проводит все файлы через все стадии обработки (в соответствии с их суффиксами), необходимые для получения на их основе динамически скомпонованного выполняемого файла a.out в текущем каталоге. Если запрошены промежуточные результаты, они тоже размещаются в текущем каталоге в файлах с именами, получаемыми путем замены входного суффикса на суффикс, соответствующий результирующему файлу. Если проходится стадия ассемблирования, команда cc помещает объектный файл (.o) в текущем каталоге, но этот файл будет удален, если единственный исходный файл компилируется в выполняемый. Все остальные промежуточные файлы помещаются во временный каталог. (Можно управлять используемым для этого каталогом с помощью переменной среды TMPDIR.)
Имеется исключение из правила суффиксов имен файлов, состоящее в том, что при указании опции -E будет воспринято любое имя файла, независимо от суффикса. Это позволяет вызывать препроцессор C как отдельное средство для применения к файлам, не содержащим исходный текст на языке C.
Следующие опции применимы ко всем стадиям.
| -Q строка | Управляет включением идентификационной информации о средстве компиляции в результат. Если в качестве строки указан y (по умолчанию), эта информация будет включена; если же n, - не будет. | ||||||||||||
| -V | Вызывает выдачу в стандартный поток ошибок информации о версии команды cc и каждого вызываемого средства, построчно. | ||||||||||||
| -W стадия,список |
Передает аргумент(ы), задаваемые в списке через запятую
(в указанном порядке) одной стадии компиляции,
задаваемой параметром стадия. Аргумент в списке может
содержать запятую, если она замаскирована обратной
косой (\). Если несколько концептуальных стадий
реализуются одним инструментальным средством, все
соответствующие списки аргументов передаются этому
средству. Стадии указываются следующим образом:
По отношению к обычным опциям и аргументам, переданным стадии компиляции, расположение аргументов из списка не определено и может изменяться. | ||||||||||||
| -X строка |
Управляет уровнем соответствия стандартам ANSI и ISO
для языка C. Аргумент опции строка может иметь одно
из следующих значений:
Во всех режимах -X, стадия компиляции выдает предупреждения о выражениях, в которых измененные правила расширения более узкого диапазона значений без знака могут привести к скрытым (если не выдавать предупреждения) изменениям в работе. | ||||||||||||
| -Y строка,каталог |
Использует указанный каталог для поиска элемента
(элементов), указанных в строке. Аргумент строка может
иметь одно или несколько из следующих значений:
В дополнение к возможности задавать каталоги для поиска средств выполнения различных стадий компиляции, если команда cc вызвана как префиксcc, то каждое используемое средство будет предварено таким же префиксом, как и имена стартовых объектных файлов. Например, если команда ./abccc вызвана с опцией -Ya,../xyz, предполагается, что ассемблер находится в файле ../xyz/abcas. |
Следующие опции применимы только на стадии препроцессирования. В ходе этой стадии всегда предопределены макросы __STDC__ и __USLC__. Тогда как __USLC__ всегда имеет положительное целое значение (которое означает, что используется компилятор USL C), __STDC__ имеет значение 1 только для -Xc, в противном случае его значение - 0.
| -A имя[(лексемы)] | Вызывает проверку имени как предиката с необязательными лексемами в круглых скобках, как если бы он был указан в директиве #assert. |
| -A - |
Делает неопределенными все предопределенные макросы
(кроме начинающихся на __) и отменяет проверку всех
утверждений #assert.
Опция влияет на следующие предопределенные макросы и проверяемые утверждения:
|
| -C | Оставляет все комментарии в строках, не содержащих директивы, в результате препроцессирования; в противном случае они удаляются. |
| -D имя[=лексемы] | Определяет имя как макрос, заменяемый на лексемы или на 1, если конструкция =лексемы не указана, как если бы он был определен директивой #define. |
| -E | Выполняет только стадию препроцессирования и посылает результат в стандартный выходной поток. Результат будет содержать строки, подобные директивам препроцессора, и может использоваться для последующей стадии компиляции. Имя обрабатываемого препроцессором файла может иметь любой суффикс. |
| -H | Вызывает выдачу в стандартный поток ошибок полных имен всех включаемых файлов, по одному в строке. |
| -I каталог | Вызывает просмотр указанного каталога в поисках включаемых файлов, имена которых не начинаются с /, перед просмотром стандартных каталогов. Если используется несколько опций -I, каталоги просматриваются в указанном порядке. |
| -P | Выполняет только стадию препроцессирования и помещает результат в файл с суффиксом .i. В отличие от -E, результат не будет содержать директив. Компиляция получившегося файла .i даст в результате выполняемый файл, номера строк в котором будут соответствовать файлу .i, а не файлу .c. |
| -U имя | Вызывает отмену определения имени как макроса, как если бы применялась директива #undef, даже если имя является предопределенным макросом (включая начинающиеся с __) или определено опцией -D. |
Следующие опции применимы ко всем стадиям, кроме стадии препроцессирования. Все опции, влияющие только на стадию компоновки, передаются также команде ld(1).
| -B строка | Управляет механизмом поиска имен библиотек на стадии компоновки для последующих опций -l. Аргумент опции, строка, может быть либо dynamic (начальная установка), либо static. Порядок указания опций -B, -L и -l имеет значение; см. описание опции -l. | ||||||||||||||||||
| -c | Пропускает фазу компоновки. Созданные объектные файлы (.o) не удаляются. | ||||||||||||||||||
| -d строка | Определяет режим создания выполняемого файла при компоновке. Если строка - это y (по умолчанию), будет создаваться динамически скомпонованный выполняемый файл; если строка - n, результат будет скомпонован статически. | ||||||||||||||||||
| -G | Ведет к созданию компоновщиком разделяемого (shared object, динамически подключаемая библиотека), вместо выполняемого файла. | ||||||||||||||||||
| -g | Вызывает генерацию информации, помогающей при символьной отладке. Эта опция конфликтует с -O, но имеет более низкий приоритет: если указаны обе опции, отладочная информация не генерируется. | ||||||||||||||||||
| -K список |
Включает различные варианты генерации кода,
оптимизации или компоновки, или их комбинации. Для
элементов следующего списка, представленных группами
по два и более, первый элемент в такой группе определяет
стандартное значение, причем действовать будет ровно
один элемент группы. Аргумент опции список - это
список одного или нескольких следующих элементов через запятую:
Несколько опций -K дают тот же эффект, как если бы отдельные списки аргументов были объединены в одной опции. | ||||||||||||||||||
| -L каталог | Добавляет каталог на стадии компоновки к списку каталогов для просмотра последующими опциями -l. Порядок указания опций -B, -L и -l имеет значение; см. описание опции -l. | ||||||||||||||||||
| -l строка | Заставляет компоновщик искать библиотеку libстрока.so или libстрока.a. Порядок указания опций -B, -L и -l имеет значение: опция -l заставляет компоновщик (в соответствующем порядке) проверять каталоги, указанные предыдущими опциями -L, а затем каталоги стандартного пути поиска библиотек (-YP). Если перед опцией -l установлено -Bdynamic, в каждом каталоге ищется libстрока.so, а затем libстрока.a; в противном случае ищется только библиотека libстрока.a. | ||||||||||||||||||
| -O | Включает стадию оптимизации. Эта опция конфликтует с опцией -g, но имеет более высокий приоритет: если указаны обе опции, отладочная информация не генерируется. Эта опция также конфликтует с -ql, но имеет более низкий приоритет: стадия оптимизации пропускается, если указаны обе эти опции. | ||||||||||||||||||
| -o файл | Заставляет компоновщик помещать результат в указанный файл, а не в a.out. | ||||||||||||||||||
| -p | Вызывает генерацию дополнительного кода, считающего количество вызовов каждой подпрограммы. Если включена стадия компоновки, стандартный путь поиска библиотек (-YP) изменяется так, чтобы каталоги, которые должны содержать подготовленные так же библиотеки, проверялись до обычных каталогов. Более того, используются другие стартовые файлы, обеспечивающие запись (в файл mon.out) времени работы каждой подпрограммы; см. prof(1). | ||||||||||||||||||
| -q строка | Вызывает генерацию дополнительного кода, снабжающего программу определенными инструментальными средствами. Если строка - это p, результат аналогичен использованию опции -p. Если строка - это l, включается стадия базового профилирования блоков, генерирующая дополнительный код, считающий, сколько раз выполнялась каждая строка исходного кода; см. lprof(1). Если строка - это f, создается журнал профиля потока (flow profile log); см. fprof(1). Опция -O конфликтует с -ql, но имеет более низкий приоритет: стадия оптимизации не включается, если указаны обе эти опции. | ||||||||||||||||||
| -S | Подавляет стадии ассемблирования и компоновки и выдает в результате файл на ассемблере (с суффиксом .s). | ||||||||||||||||||
| -v | Вызывает выполнение на стадии компиляции дополнительных синтаксических, семантических и аналогичных выполняемым lint(1) проверок. | ||||||||||||||||||
| -Z строка |
Управляет упаковкой структур на стадии компиляции.
Аргумент строка может иметь одно из следующих значений:
|
Команда cc распознает -e, -h, -u и -z как опции стадии компоновки с параметрами. Эти и все остальные нераспознанные аргументы-опции передаются команде ld(1).
Наконец, команда cc также распознает опцию -#. Если указана одна опция -#, команда cc будет выдавать каждое инструментальное средство с опциями и аргументами непосредственно перед вызовом. При наличии двух опций -# выдается также полный путь к каждому инструментальному средству; при указании трех таких опций все вызовы пропускаются.
Если опция выбора режима (такая как -Q или -X) указана несколько раз, обычно используется последняя.
Для нового кода необходимо использовать -Xa, -Khost и -v; старый код лучше обрабатывается при указании -Xt и -Kno_host.
Для типичной многопользовательской системы на основе процессора Intel486,
самый быстрый код, скорее всего, будет сгенерирован при указании опций
-Xa, -Kno_ieee, -Kinline и -O и при использовании
стандартных заголовочных файлов типа
Copyright 1994 Novell, Inc.
Copyright 2000 В. Кравчук,
OpenXS Initiative, перевод на русский язык
Следующий выпуск будет посвящен очередной части справочного руководства bash(1). Выпуск ожидается в четверг, 27 июня.
С наилучшими пожеланиями,
В.К.
|
|