|
НАЗВАНИЕ
cc - компилятор языка C
СИНТАКСИС
cc [-c] [-p] [-g] [-O] [-L каталог] [-l библиотека] [-W фаза,арг1[,арг2 ...] [-S] [-E] [-P] [-H] [-D имя] [-U имя] [-I каталог] [-B цепочка_символов] [-t [p012al]] [-w] [-#] файл ...
ОПИСАНИЕ
Команда cc является командой вызова компилятора языка
C, который генерирует ассемблерные инструкции. Команда
cc принимает аргументы следующих типов:
Аргументы, оканчивающиеся на .c, интерпретируются как имена файлов, содержащих исходные тексты на языке C; они компилируются, и каждый об ектный модуль помещается в файл с именем, которое образуется из имени исходного файла замещением расширения .c на .o. Однако об ектный .o-файл обычно удаляется, если компилируется и одновременно загружается программа, состоящая из одного модуля. Аналогично, аргументы, оканчивающиеся на .s, интерпретируются как имена файлов, содержащих исходные тексты на языке ассемблера, и ассемблируются с образованием об ектных .o-файлов.
Командой cc интерпретируются следующие опции [см. также опции редактора связей ld(1) и ассемблера as(1)]:
-c | Отменить фазу редактирования связей и создавать об'ектный файл даже в случае программы, состоящей только из одного модуля. |
-p | Сгенерировать дополнительные команды для подсчета числа обращений к каждой функции. Кроме того, если имеет место фаза редактирования связей, стандартная подпрограмма инициализации заменяется на такую, которая автоматически вызывает функцию monitor(3C) и обеспечивает запись файла mount.out при нормальном завершении об'ектной программы. Профиль выполнения программы может быть затем получен при помощи команды prof(1). |
-g | Сгенерировать дополнительную информацию для отладчика sdb(1). |
-О | Включить оптимизацию об ектного кода. |
-L каталог | Дополнить каталогом список каталогов, которые содержат об ектные библиотечные модули [для редактирования связей посредством ld(1)]. |
-l библиотека | Скомпоновать с об ектной библиотекой [для ld(1)]. |
-W фаза,арг1[,арг2 ...] | Передать аргумент(ы) заданной фазе компиляции, где фаза - это один из символов [p012al], которые обозначают, соответственно, препроцессор, первый проход компилятора, второй проход компилятора, оптимизатор, ассемблер, редактор связей. Например, по опции -W,a,-m перед вызовом ассемблера будет вызван макропрепроцессор m4(1). Такая опция имеет смысл для файлов, содержащих ассемблерные вставки. |
-S | Скомпилировать указанные C-программы и поместить результат на языке ассемблера в соответствующие файлы с расширением .s (в этом случае об ектные модули не создаются). |
-E | Указанные C-программы обработать только препроцессором cpp(1) и результат направить на стандартный вывод. |
-P | Указанные C-программы обработать только препроцессором cpp(1) и результат поместить в соответствующие файлы с расширением .i. |
-H | Выдать в стандартный протокол составные имена всех участвующих в компиляции включаемых файлов. |
-D имя | Определить имя для препроцессора. Этот механизм используется в условных директивах препроцессора, так как позволяет определять имена за пределами исходного текста. |
-U имя | Сделать имя неопределенным для препроцессора. |
-I каталог | Изменить алгоритм поиска включаемых (посредством директивы #include) файлов, имена которых не начинаются с символа /, а именно: сначала искать в указанном каталоге, а затем уже в каталогах стандартного списка. Так, включаемые файлы, чьи имена заданы в двойных кавычках, сначала ищутся в каталоге, содержащем файл, затем в каталогах, указанных с помощью опции -I, а затем уже в каталогах стандартного списка. Включаемые файлы, чьи имена заданы в угловых скобках, не ищутся в каталоге, содержащем файл. |
-B цепочка_символов | Получать составные имена программ, заменяющих препроцессор, компилятор, ассемблер и редактор связей, путем конкатенации цепочки_символов с окончаниями cpp, c0, c1, optim, as и ld. Если цепочка_символов пуста, она трактуется как /lib/o. |
-t [p012al] | В файлах, имена которых заданы с помощью опции -B, искать только требуемые компилятор, оптимизатор, ассемблер и редактор связей. Если отсутствует опция -B, то цепочка_символов берется равной /lib/n. Указание опции -t "" эквивалентно -t p012. |
-w | Подавить все предупреждающие сообщения. |
-# | Внутренний флаг отладки; выдавать название каждой выполняемой фазы компиляции. Если флаг задан дважды, то фазы не выполняются, а только распечатываются их названия. |
Остальные аргументы рассматриваются как опции редактора связей, имена об ектных модулей, совместимых с C-программами (обычно эти модули получены в результате предшествующих запусков компилятора), или, возможно, библиотек C-совместимых программ. Эти программы, вместе с результатами текущей компиляции, обрабатываются редактором связей, и созданная выполняемая программа, если не указана опция редактора связей -o, помещается в файл a.out.
С появлением версии 5 операционной системы UNIX стандарт языка C был расширен. Теперь имена переменных могут иметь произвольную длину. Этот стандарт поддерживается на компьютерах семейства M68000. Опция -T заставляет компилятор обрезать длинные имена для обеспечения совместимости с более ранними версиями.
ОКРУЖЕНИЕ
Компилятор выбирает соответствующие версии библиотек libc и libm согласно значениям переменных окружения FP и SHLIB.
ФАЙЛЫ
файл.c Исходный файл. файл.o Об ектный файл. файл.s Ассемблерный файл. a.out Результат работы редактора связей. /usr/tmp/ctm* Временные файлы. /lib/cpp Препроцессор. /lib/c[01] Две фазы компиляции. /lib/optim Оптимизатор. /bin/as Ассемблер as(1). /bin/ld Редактор связей ld(1). /lib/crt1.o /lib/crtn.o Стандартная программа инициализации. /lib/mcrt0.o Программа инициализации профилирования. /lib/libc.a Стандартная библиотека, см. раздел 3. /lib/libm.a Математическая библиотека, см. раздел 3. /lib/lib*_s.a Разделяемые версии библиотек. /lib/lib*881.a Версии библиотек для сопроцессора арифметики вещественных чисел. /lib/lib*881u.a Универсальные версии библиотек. /usr/lib/libp/*.a Версии библиотек для профилирования.
СМ. ТАКЖЕ
as(1), cpp(1), ld(1), prof(1), sdb(1).
ДИАГНОСТИКА
Диагностика, вырабатываемая компилятором языка C, может
быть иногда не очень ясной. Некоторые сообщения могут
быть выданы ассемблером или редактором связей.
ПРЕДОСТЕРЕЖЕНИЯ
По умолчанию значение, возвращаемое из C-программы, является абсолютно случайным. Есть только два способа
возвратить определенное значение - явно воспользоваться
системным вызовом exit [см. exit(2)] или выйти из функции main( ) с помощью конструкции return выражение.
|