Книга: Программирование для Linux. Профессиональный подход
1.2.1. Компиляция одного исходного файла
1.2.1. Компиляция одного исходного файла
Компилятор языка С называется gcc
. При компиляции исходного файла нужно указывать опцию -с
. Вот как, например, в режиме командной строки компилируется файл main.с
:
% gcc -с main.с
Полученный объектный файл будет называться main.o
.
Компилятор языка C++ называется g++
. Он работает почти так же, как и gcc
. Следующая команда предназначена для компиляции файла reciprocal.cpp
:
% g++ -c reciprocal.cpp
Опция -с
говорит компилятору о необходимости получить на выходе объектный файл (он будет называться reciprocal.o
). Без неё компилятор g++
попытается скомпоновать программу и создать исполняемый файл.
В процессе написания любой более-менее крупной программы обычно задействуется ряд дополнительных опций. К примеру, опция -I
сообщает компилятору о том, где искать файлы заголовков. По умолчанию компиляторы GCC просматривают текущий каталог, а также каталоги, где установлены файлы стандартных библиотек. Предположим, наш проект состоит из двух каталогов: src
и include
. Следующая команда даст компилятору g++
указание дополнительно искать файл reciprocal.hpp
в каталоге ../include
:
% g++ -с -I ../include reciprocal.cpp
Иногда требуется задать макроконстанты в командной строке. Например, в коммерческой версии программы нет необходимости осуществлять избыточную проверку утверждения в файле reciprocal.cpp
; она нужна лишь в целях отладки. Эта проверка отключается путем определения макроконстанты NDEBUG
. Можно, конечно, явно добавить в файл директиву #define
, но это означает изменение исходного текста программы. Проще сделать то же самое в командной строке:
% g++ -c -D NDEBUG reciprocal.cpp
Аналогичным образом можно задать конкретный уровень отладки:
% g++ -с -D NDEBUG=3 reciprocal.cpp
При написании коммерческих программ оказываются полезными средства оптимизации кода, имеющиеся в компиляторах GCC. Есть несколько уровней оптимизации; для большинства программ подходит второй. Следующая команда компилирует файл reciprocal.cpp
с включенным режимом оптимизации второго уровня:
% g++ -с -O2 reciprocal.cpp
Учтите, что средства оптимизации усложняют отладку программы. Кроме того, бывают случаи, когда наличие оптимизации приводит к проявлению скрытых ошибок, незаметных ранее.
Компиляторы gcc
и g++
принимают множество различных опций. Получить их полный список можно в интерактивной документации. Для этого введите следующую команду:
% info gcc
- Компиляция
- Размещение исходного кoдa в пpoeктe
- Создание файла JAR для набора МID-летов
- Компиляция CIL-кода с помощью ilasm.exe
- Компиляция пpoeктa
- Эффективная работа с временными файлами сортировки
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- Стиль написания исходного кода
- 13. Зарабатываем на своих файлах: файлообменники, загружаеми получаем процент за скачивание
- Речевые модули для «холодного» звонка с целью назначить встречу
- Листинг 15.11. Код для загрузки файла с Web-сервера