Чтение онлайн

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

gcc -о helloworld helloworld.c

Очень полезна опция – v, которая выводит различную информацию о стадиях компиляции. Кроме того, эта опция выводит версию компилятора.

21.1.3. Опции языка

Из всех опций языка мне пригодилась лишь опция ANSI, которая выключает все функции GNU С, несовместимые со стандартом ANSI. К таким функциям относятся asm, inline, typeof и другие.

21.1.4. Опции препроцессора

Эти опции задают режим предварительной обработки исходного кода (до собственно компиляции).

Очень важной является опция – include <файл>. Она позволяет «прогнать» через препроцессор сперва содержимое указанного файла, а только после этого файл, который передан препроцессору. В результате указанный файл будет откомпилирован раньше, чем все остальные.

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

Опция – nostdinc++ запрещает использование стандартных файлов заголовков для языка С++.

21.1.5. Опции компоновщика

Опция компоновщика – l позволяет явно указать имя библиотеки, которая будет использоваться при сборке вашей программы. Например,

gcc -lmylibrary myfile.c

Компоновщик будет использовать файл

libmylibrary.a
, который он попытается найти в системных каталогах библиотек и каталогах, которые вы укажете с помощью опции -L.

Опция – nostdlib запрещает использовать все системные библиотеки. При этом будут использованы библиотеки только из тех каталогов, которые вы укажете с помощью опции -L.

Опция – static означает, что будет использована статическая линковка.

21.1.6. Опции каталогов

Две важнейшие опции каталогов: -I и -L. Первая позволяет указать путь для поиска заголовков (файлов с расширением .h), а вторая — библиотек. Например, если вы хотите, чтобы компилятор использовал файлы заголовков, которые находятся в каталоге

/root/include
, тогда укажите опцию – I/root/include. Обратите внимание на отсутствие пробела между буквой I и первым символом пути.

Если вы укажете опцию -I-, то в каталогах, которые вы укажете в объявленной до этого опции -I, будет производиться поиск только пользовательских заголовков, то есть заголовков, указанных в директиве #include "файл". Пути для поиска системных заголовков, которые указываются директивой #include <файл>, останутся неизменными.

21.1.7. Опции отладки

Если вы хотите использовать отладчик, например gdb, для отладки своей программы, укажите опцию -g при вызове компилятора. Эта опция помещает в откомпилированный файл отладочную информацию, вследствие чего существенно увеличивается объем файла. Поэтому никогда не используйте эту опцию для окончательной версии продукта.

21.1.8. Опции оптимизации

Компилятор gcc позволяет оптимизировать код вашей программы. Другими словами, gcc сделает все для того, чтобы ваша программа была как можно меньше по размеру и как можно быстрее запускалась. Для включения режима оптимизации используйте опцию -O1. Вы можете поэкспериментировать с опциями -O2 и -O3, которые еще больше пытаются оптимизировать вашу программу, однако не перестарайтесь. Если ваша программа после такой оптимизации работает еще медленнее, чем до нее, или же некорректно работает, используйте опцию -O0 для отключения оптимизации.

Обо всех остальных опциях вы сможете прочитать в справочной системе.

21.2. Сборочная утилита make

Если вы уже собирали прикладную программу из исходных кодов, то обратили внимание на стандартную последовательность команд:

make; make install
.

Без утилиты make не обходится создание ни одного серьезного проекта. Эта утилита управляет сборкой большого проекта, состоящего из десятков и сотен файлов. Программа make может работать не только с компилятором gcc, но и с любым компилятором для любого языка программирования, способным запускаться из командной строки.

Директивы утилиты make служат для определения зависимостей между файлами проекта и находятся в файле по имени Makefile, расположенном в каталоге сборки.

Разберемся, как пишутся make-файлы. Общий формат make-файла выглядит так:

цель1: список_необходимых_файлов

последовательность_команд

...

цельN: список_необходимых_файлов

последовательностъ_команд

Цель — это метка для некоторой последовательности команд (например, install) или результирующий файл, который нужно «построить» — скомпилировать или скомпоновать.

Цели должны отделяться друг от друга хотя бы одной пустой строкой. Список необходимых файлов — это перечень файлов или других целей, которые нужны для достижения данной цели; он может быть и пустым.

Последовательность команд — это команды, которые нужно выполнить для достижения цели. Последовательность команд должна отделяться от начала строки символом табуляции, иначе вы получите ошибку «missing separator» (нет разделителя).

Make-файл может содержать комментарии — они начинаются символом #.

В make-файлах вы можете использовать макроопределения:

CC=gcc

PATH=/usr/include /usr/src/linux/include

MODFLAGS:= -O3 -Wall -DLINUX -I$(PATH)

...

$(CC) $(MODFLAGS) -c proga.c

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

Формат запуска утилиты make:

Поделиться:
Популярные книги

Последний рейд

Сай Ярослав
5. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Последний рейд

Мечник Вернувшийся 1000 лет спустя

Ткачев Андрей Юрьевич
1. Вернувшийся мечник
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Мечник Вернувшийся 1000 лет спустя

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Воронцов. Перезагрузка. Книга 4

Тарасов Ник
4. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 4

Первый среди равных. Книга IX

Бор Жорж
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IX

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Ермак. Начало

Валериев Игорь
Фантастика:
альтернативная история
7.33
рейтинг книги
Ермак. Начало

Чужак из ниоткуда 5

Евтушенко Алексей Анатольевич
5. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
фэнтези
5.00
рейтинг книги
Чужак из ниоткуда 5

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Мастер 11

Чащин Валерий
11. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 11

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет

Барон обходит правила

Ренгач Евгений
14. Закон сильного
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Барон обходит правила

Глэрд IX: Легионы во Тьме

Владимиров Денис
9. Глэрд
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Глэрд IX: Легионы во Тьме