Запуск компилятора. Командная строка — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Запуск компилятора. Командная строка

2022-10-05 31
Запуск компилятора. Командная строка 0.00 из 5.00 0 оценок
Заказать работу

Для осмысленной работы компилятора ему необходимо предоставить дополнительную информацию – задать имя исходного файла, указать режим работы и т.д. Эта информация передается компилятору непосредственно в командной строке. Общий формат командной строки такой:

<имя-исполняемого-файла-компилятора> <строка-опций>

Типовой пример:

Isc.exe –I Include test.c

Замечани е

Здесь и далее описывается вызов утилиты для платформы Win32. Для платформы Linux исполняемый файл имеет пустое расширение.

 

Пример программы

Классический пример программы. Его можно скомпилировать с помощью следующей командной строки: isc.exe –I Include hello.c. В результате успешной работы компилятора будет создан ассемблерный файл (hello.asm), который необходимо транслировать с помощью ассемблера (asm.exe) и собрать линкером (lnk.exe) с библиотеками (rtl.lib и clib.lib).

#include <stdio.h>int main(){ printf("Hello, world!\n"); return 0;}

4 Использование компилятора С/С++

Переменные среды окружения

Компилятор использует переменную окружения INCLUDE для поиска подключаемых файлов. Дополнительные пути могут быть указаны из командной строки с помощью опции -I.

Запуск компилятора

Командная строка

Компилятор поставляется в виде исполняемого файла isc.exe. В зависимости от расширения файла, который подается на вход компилятора, он работает как C или С++ компилятор.

Компилятор работает как C-компилятор, если ему на вход подается файл с расширением .c, и как C++-компилятор, если подается файл с расширением .cpp,.cxx или .cc.

Входной файл и выходной файл

За один запуск компилятор принимает один входной (исходный) файл и генерирует один выходной. Исходный файл для компиляции задается в командной строке опцией -S (собственно опцию можно опустить).

Выходной файл компилятора может содержать либо промежуточное представление, либо информацию с выхода препроцессора (выходной файл препроцессора), либо ассемблерный текст программы. Управление типом выходного файла производится опцией -p и -P . Имя выходного файла можно задать опцией -O.

Выходной файл препроцессора содержит текст программы на языке С/C++, в котором нет ни директив препроцессора (за исключением, быть может, директив #line), ни неподставленных макросов.

По умолчанию, создается ассемблерный файл с именем входного файла и расширением .asm

Общий синтаксис опций

4.2.3.1 Виды опций

Опции компилятора подразделяются на две категории: опции с аргументами и опции без аргументов (ключи).

Опции с аргументами обозначаются прописными буквами английского алфавита. Ключи обозначаются строчными буквами английского алфавита.

Опция должна начинаться с одного или нескольких пробельных символов, за которыми следует символ "-" (минус) и литера, обозначающая опцию:

-E10 –p –c -W10

Ключи можно "группировать" сразу за символом "минус":

-E10 –pcl -W10

К такой "группе" ключей можно в конце добавить опцию с аргументом (но только одну):

-E10 –pclW10

Аргументы опций можно (а иногда и нужно - см. ниже) отделять от литер опций одним или нескольким пробелами:

-E 10 –pclW 10

4.2.3.2 Значения опций по умолчанию

Многие опции имеют определенные значения по умолчанию. Вхождение обозначения опции в командную строку перекрывает (заменяет) значение по умолчанию значением, указанным в командной строке.

По умолчанию все ключи имеют значение "ложно". Это значит, что если ключ не указан, то считается, что соответствующий внутренний параметр компилятора имеет значение "ложно". Если ключ указан, то соответствующий внутренний параметр компилятора принимает значение "истинно".

Опции с аргументами не имеют значений по умолчанию, если иное не специфицировано явно в описании соответствующей опции.

4.2.3.3 Повторные вхождения опций

Командная строка разбирается слева направо.

Если опция встречается в командной строке несколько раз, то более правое вхождение опции называется повторным (относительно левого). В зависимости от семантики опции, повторное вхождение либо перекрывает (заменяет) первоначальное, либо дополняет его, либо считается ошибкой.

4.2.3.4 Общий синтаксис аргументов опций

За каждым вхождением литеры, обозначающей опцию с аргументом, должен следовать аргумент. Аргумент – это последовательность литер (подстрока), не содержащая пробелов. Непосредственно перед аргументом (после литеры, обозначающей опцию) допускается один или несколько пробелов. В соответствии с семантикой опции, аргумент интерпретируется либо как целое число, либо как текстовая строка.

Аргументы-числа должны указываться в десятичном формате. Допускаются неотрицательные значения в диапазоне от 0 до 2147483647. В рамках конкретной опции для аргумента-числа могут быть заданы дополнительные ограничения.

Аргументы-строки допускается заключать в двойные кавычки; это даёт возможность вводить в них пробелы; при этом необходимо вводить после литеры, обозначающей опцию, хотя бы один пробел. Для того, чтобы передать аргумент-строку, содержащую символ "двойная кавычка", нужно перед каждой двойной кавычкой вставить обратную косую черту (\). Отметим, что в рамках конкретной опции для аргументов-строк могут быть заданы дополнительные ограничения или же задан иной синтаксис - см. описания опций.

Описания опций

-S src_file Задание исходного файла Эта опция указывает компилятору входной файл, который следует обработать. Параметр src_file указывается в соответствии с правилами, принятыми в используемой операционной системе. Компилятор не делает никаких предположений о расширении имен исходных файлов. Как следствие, его всегда нужно указывать явно. Собственно текст опции (-S) разрешается опускать. Если путь к исходному файлу не указан, то компилятор ищет его в текущем каталоге. Если путь указан, то компилятор ищет исходный файл именно там. Путь может быть указан в "относительном" виде; если это так, то компилятор использует в качестве точки отсчета текущий каталог. Пример: -S file.cpp -S "..\my sources\file.c" c:\myproj\file.cpp
-O out_file Задание имени выходного файла Эта опция указывает компилятору имя и расположение выходного файла. Параметр out_file указывается в соответствии с правилами, принятыми в используемой операционной системе. Допускается не указывать путь, имя и расширение выходного файла; при этом компилятор использует установки по умолчанию. По умолчанию, у имени входного файла меняется расширение на .asm (при опции -P2) или .ir (при опции -P0). Путь может быть указан в "относительном" виде; если это так, то компилятор использует в качестве точки отсчета текущий каталог. -O ofile1.ttt -O..\OBJ\ofile2.t3 -O c:\myproj\ofile3
-I ipath Задание путей поиска включаемых файлов Эта опция устанавливает список путей (спецификаций каталогов), который будет использоваться компилятором для поиска включаемых файлов, для которых не указано точное местонахождение. ipath - это список спецификаций каталогов, отделенных друг от друга точками с запятой; их синтаксис должен соответствовать принятому в используемой операционной системе. Спецификация некоторого каталога может быть в "относительном" виде; в этом случае каталог, в котором выполняется поиск, компилятор находит объединением спецификации текущего каталога и "относительного" пути. ipath при поиске включаемого файла просматривается слева направо. В случае повторного вхождения данной опции, список каталогов, указанный в командной строке позже (правее) просматривается перед путями, указанными в командной строке раньше (левее). Например, если указать опции -I 1;2 -I 3;4, то порядок просмотра будет таким: 3, 4, 1, 2. Замечания Поиск в каталогах, указанных опцией -I, осуществляется раньше, чем в переменной окружения INCLUDE Компилятор не осуществляет поиск включаемого файла по списку каталогов только в случае, если в соответствующей директиве #include указан "абсолютный" путь к файлу. Отметим, что если указан "относительный" путь, то компилятор выполняет поиск. Если в директиве #include были использованы угловые скобки, и не был указан путь, то файл ищется только по каталогам, перечисленным в опциях -I и переменной окружения INCLUDE. Если же в #include были использованы двойные кавычки, и не был указан путь, поиск производится в таком порядке: · в том же каталоге, в котором находится исходный файл, · в текущем каталоге, · по каталогам, перечисленным в опциях -I и переменной окружения INCLUDE. Если в директиве #include был использован "относительный" путь, то поиск производится так же, как и для случая, когда путь к файлу вообще не указан. Однако при поиске компилятор добавляет к спецификациям каталогов "относительный" путь из директивы #include Пример: Запуск компилятора: C:\Prj\Src\Obj > isc.exe -IC:\Prj\Inc;INC -S..\a.cpp Файл C:\Prj\Src\a.cpp : #include "Sub/inc.hpp"           Поиск файла inc.hpp производится в таком порядке и в таких каталогах: C:\Prj\Src\Sub C:\Prj\Src\Obj\Sub C:\Prj\Inc\Sub C:\Prj\Src\Obj\INC\Sub          
-A opt_file Включить в командную строку опции из файла Эта опция включает в командную строку содержимое некоторого файла (будем называть его далее файлом опций). Это позволяет обойти ограничения на размер командной строки, имеющиеся во многих ОС. Параметр opt_file указывается в соответствии с правилами, принятыми в используемой операционной системе. Если путь к файлу опций не указан, то компилятор ищет его в текущем каталоге. Если путь указан, то компилятор ищет исходный файл именно там. Путь может быть указан в "относительном" виде; если это так, то компилятор использует в качестве точки отсчета текущий каталог. При чтении файла опций компилятор игнорирует символы "возврат каретки" и "перевод строки" (за исключением того, что эти символы не должны встречаться внутри опций), поэтому файл опций может состоять из произвольного количества строк. Кроме того, поддерживаются комментарии. Комментарий может находиться в любой строке файла опций; он должен начинаться с символа '#', и заканчивается с концом этой строки. Для файла опций нет ограничений по размеру. Пример: -A options.opc -A "..\My Sources\options.opc" -A c:\myproj\opt1.opc              
-D name=text Определение макроса Предписывает компилятору определить макрос с указанным именем и указанным значением. Предоставляет пользователю возможность определить макрос или несколько макросов без модификации исходных текстов программы. Использование этой опции полностью аналогично использованию директивы #define в самом начале модуля (перед всеми строками исходного файла; как бы в "нулевой" строке). Варианты использования этой опции соответствуют добавлению следующих директив в исходный текст программы: Опция -D macro_name=macro_text соответствует директиве: #define macro_name macro_text Опция -D macro_name соответствует такой директиве: #define macro_name Семантика полностью соответствует семантике для директив #define, для случая определения макросов без параметров. В частности: если значение макроса не указано, то оно устанавливается пустым; многократное появление этой опции в командной строке для одних и тех же имен макросов обрабатывается как последовательное использование директив #define для одного и того же имени макроса, и т.д. Случаи, когда одновременно с данной опцией в командной строке используется опция -U, рассматриваются как соответствующая последовательность директив #define и #undef. Эта директива не дает возможности определять макросы с параметрами Пример: -D FOO=1 -D MOO -D "ZOO=(FOO + MOO)" -D "POO=\"строка с пробелом\""              
-U name Удаление определения макроса Предписывает компилятору удалить определение макроса с указанным именем, заданного в командной строке левее этой опции. Использование этой опции полностью аналогично использованию директивы #undef в самом начале модуля (перед всеми строками исходного файла; как бы в "нулевой" строке). macro_name соответствует директиве: #undef macro_name Семантика полностью соответствует семантике для директив #undef. Эта директива может удалить только макрос, определенный левее командной строке.
-p Выполнять только препроцессирование Предписывает компилятору сгенерировать файл, содержащий информацию с выхода препроцессора. Файл промежуточного представления в этом случае не генерируется. Необходимо указать имя выходного файла при помощи опции -O (см. "Задание имени выходного файла").
-c Выводить комментарии в выходной файл препроцессора Предписывает компилятору сохранять комментарии во время препроцессирования; в результате они остаются в выходном файле препроцессора. Отметим, что имеет смысл только при совместном использовании с опцией -p.
-E max_err Задание предельного числа сообщений об ошибках Предписывает компилятору прервать трансляцию, как только число обнаруженных ошибок достигнет max_err. Такая ситуация трактуется компилятором как фатальная ошибка, о чем выдается соответствующее сообщение. Значение по умолчанию: 25.
-W max_warn Задание предельного числа предупреждений Предписывает компилятору прервать трансляцию, как только количество выведенных предупреждений достигнет max_warn. Такая ситуация трактуется компилятором как фатальная ошибка, о чем выдается соответствующее сообщение. Значение по умолчанию: 100000.
-w Не выводить предупреждения По умолчанию, компилятор выводит на консоль все предупреждения (см. также описание опции "Задание предельного числа предупреждений"; эта опция предписывает компилятору не выводить никаких предупреждений). Если указана опция -w, то опция -W max_warn не будет работать, что является косвенным эффектом.
-wnXXXX Отключение предупреждений с номером XXXX Предписывает компилятору не выводить предупреждения с номером XXXX.
-q Формировать сложный код возврата, а не простой (0 и не 0) Эта опция позволят получить в коде возврата более детальную информации о результате компиляции.
-Pphase Задать фазы компиляции Эта опция указывает компилятору, какую из фаз компиляции следует выполнить. Она может принимать два значения: · 0 - проверяется синтаксис исходной программы, выходной файл содержит промежуточное представление (если не указана опция); · 2 - происходит полная компиляция. На выходе получается ассемблерный файл. Используется по умолчанию. Между буквой опции и числом фаз компиляции не должно быть пробелов.
-OPTlevel Задать уровень оптимизации Эта опция задает уровень оптимизирования выходного кода программы. Опция может принимать одно из следующих значений: · 0 - оптимизация выключена. Используется по умолчанию; · 1 - простая оптимизация; · 2 - сложные оптимизации. Между буквой опции и степенью оптимизации не должно быть пробелов.
-i Выключение генерации отладочной информации По умолчанию, отладочная информация генерируется. Эта опция предписывает компилятору отключить генерацию.
-except Выключение поддержку генерации исключительных ситуаций. Только С++. По умолчанию, генерируется поддержка для исключительных ситуаций. Эта опция предписывает компилятору отключить генерацию кода для поддержки исключительных ситуаций, результирующий код будет быстрее работать.
-rtti Выключение поддержку RTTI. Только С++. По умолчанию, генерируется поддержка для RTTI (dynamic_cast и typeid). Эта опция предписывает компилятору отключить генерацию кода для RTTI, результирующий код будет меньше по размеру.
-Iafile Подключить файл после исходного текста Добавляет все содержимое файла file в конец исходного текста.
-Ibfile Подключить файл до исходного текста Добавляет все содержимое файла file перед началом исходного текста.
codepage Установка кодировки исходного файла Предписывает компилятору воспринимать исходный текст так, как будто он написан в указанной кодировке. Допустимые значения codepage: "en_US.850" - английский язык, кодировка 850; "ru_RU.1251" - русский язык, кодировка 1251 (Windows); "ru_RU.866" - русский язык, кодировка 866 (DOS). Если указана опция -C"ru_RU.1251" или -C"ru_RU.866", то выходной файл будет в кодировке 1251. Если указана опция -C"en_US.850", то выходной файл будет в кодировке 850. Значение по умолчанию "en_US.850" (английский язык, кодировка 850). Пример: -C "ru_RU.1251"-Cen_US.850              
-Mcodepage Установка языка и кодировки сообщений компилятора Предписывает компилятору выводить все диагностические сообщения на указанном языке и в указанной кодировке. Допустимые значения codepage: "en_US.850" - английский язык, кодировка 850; "ru_RU.1251" - русский язык, кодировка 1251 (Windows); "ru_RU.866" - русский язык, кодировка 866 (DOS). Значение по умолчанию "en_US.850" (используется английский язык, кодировка 850). Пример: -M "ru_RU.1251"-Men_US.850              
- 6405 Установка целевой платформы Сообщает компилятору, целевой платформой является NeuroMatrix 6405. По умолчанию целевой платформой является NeuroMatrix 6403.
-Tc Выбор нотации Сообщает компилятору, что на вход подается текст на языке C (ISO/IEC 9899:1990).
-Tc99 Выбор нотации Сообщает компилятору, что на вход подается текст на языке C (ISO/IEC 9899:1999).
-Tp Выбор нотации Сообщает компилятору, что на вход подается текст на языке C++.
-? Вывести краткий перечень опций Эта опция предписывает компилятору вывести на консоль список поддерживаемых опций с их краткими описаниями. Описание выводится на английском языке.

Коды возврата

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

Код возврата передается операционной системе в соответствии с принятыми в ней правилами.

Таблица 4.1 - Кода возврата компилятора при использовании опции -q

Результат работы компилятора Код возврата
Не было ни ошибок, ни предупреждений 0
Были предупреждения, ошибок не было 1 + ( message number * 256)
Были нефатальные ошибки и, возможно, предупреждения 2 + ( message number * 256)
Были фатальные ошибки и, возможно, ошибки и предупреждения 3 + ( message number * 256)

message number – это номер последнего диагностического сообщения, выданного компилятором.

Расширение языка


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.019 с.