Linux: Полное руководство
Шрифт:
Ключ -f указывает файл инструкций, который нужно использовать вместо Makefile. Если этот ключ не указан, то make ищет в текущем каталоге файл Makefile и начинает собирать указанную цель. Если цель не указана, то выполняется первая встреченная в make-файле. Сборка выполняется рекурсивно: make сначала выполняет все цели, от которых зависит текущая цель. Если зависимость представляет собой файл, то make сравнивает его время последней модификации со временем целевого файла: если целевой файл старше или отсутствует, то будет выполнена указанная последовательность команд. Если целевой файл моложе, то текущая цель считается достигнутой.
Если нужно избежать пересборки какого-то из файлов проекта, то можно искусственно «омолодить» его командой touch,
Работа программы make заканчивается, когда достигнута цель, указанная в командной строке. Обычно это цель all, собирающая все результирующие файлы проекта. Другими распространенными целями являются install (установить собранную программу) и clean (удалить ненужные файлы, созданные в процессе сборки).
В листинге 21.2 представлен make-файл, собирающий небольшой проект из двух программ client и server, каждая из которых компилируется из одного файла исходного кода.
Листинг 21.2. Примерный make-файл
Обычно при вызове утилиты make не нужно задавать никаких ключей. Но иногда использование ключей бывает очень кстати (таблица 21.1).
Ключи команды make Таблица 21.1
Ключ | Назначение |
---|---|
– C каталог | Перейти в указанный каталог перед началом работы |
– d | Вывод отладочной информации |
– e | Приоритет переменным окружения. Если у нас установлена переменная окружения CC и в Makefile есть переменная с таким же именем, то будет использована переменная окружения |
– f файл | Использовать указанный файл вместо Makefile |
– i | Игнорировать ошибки компилятора |
– I каталог | В указанном каталоге будет производиться поиск файлов, включаемых в Makefile |
– j n | Запускать не более n команд одновременно |
– k | Продолжить работу после ошибки, если это возможно |
– n | Вывести команды, которые должны были выполниться, но не выполнять их |
– о файл | Пропустить данный файл, даже если в Makefile указано, что он должен быть создан заново |
– r | Не использовать встроенные правила |
– s | Не выводить команды перед их выполнением |
– w | Вывод текущего каталога до и после выполнения команды |
21.3. Пакет binutils и другие полезные программы
Пакет
♦ ld — компоновщик: программа, связывающая объектные файлы и библиотеки в исполняемый файл;
♦ ar — работа с архивами (создания, модификация и извлечение);
♦ nm — вывод названий идентификаторов из двоичных файлов;
♦ objcopy — копирование и трансляция двоичных файлов;
♦ objdump — вывод информации из двоичных файлов;
♦ ranlib — генерирование индекса оглавления архива;
♦ size — вывод размеров секций архива или двоичного файла;
♦ strings — вывод строк, которые возможно прочитать, из двоичных файлов;
♦ addr2line — конвертирование адресов в памяти в строку в
♦ nlmconv — конвертирует объектный код в NLM.
А теперь перечислим несколько полезных вспомогательных программ.
21.3.1. ansi2knr
Утилита ansi2knr предназначена для преобразования текстов программ, написанных в соответствии со стандартом ANSI С, в программы на «классическом» С Кернигана и Ричи. Формат вызова:
21.3.2. as
Программа as — это GNU-версия ассемблера, предназначенная для создания объектных файлов из программ, написанных на языке ассемблера. Формат вызова:
Ключи программы as Таблица 21.2
Ключ | Назначение |
---|---|
– а | Вывод листинга |
– ad | He выводить отладочные сообщения |
– ad | Включение в листинг текста программы, написанной на языке высокого уровни, если компиляций проводилась с ключом -g |
– al | Вывод листинга на ассемблере |
– an | Не обрабатывать форм |
– as | Вывод списка символов программы |
– aфайл | Вывести листинг в указанный файл |
– f | Быстрый режим. Директивы препроцессора не обрабатываются |
– iпуть | Добавить указанный путь к Include-пути |
– MRI | Обеспечить MRI-совместимость |
– о файл | Создание объектного файла с указанным именем |
– R | Поместить сегмент данных в сегмент кода |
– v | Вывод версии |
– W | Не выводить предупреждения |
21.3.3. bison
Программа bison — это грамматический разборщик (парсер): она создает C-программу, предназначенную для разбора определенной грамматики. Данная программа вам не понадобится до тех пор, пока вы не захотите написать собственный компилятор. Ключи программы представлены в таблице 21.3. Формат вызова:
Ключи программы bison Таблица 21.3
Ключ | Назначение |
---|---|
– b префикс | Использовать указанный префикс для имени входящего файла |
– d | Создать заголовочный файл, содержащий информацию о типах грамматических образцов (токенов), которые определены в вашей грамматике |
– I | Не вставлять код в существующие файлы |
– о файл | Установить файл результата |
– t | Включить отладочную информацию |
– v | Записать созданную программу в файл у.out put |
21.3.4. flex
Это еще одна программа, которая пишет код за нас. Flex может написать программу на языке С, которая будет искать заданные образны текста в текстовых файлах и выполнять определенные действия, заданные программистом. Если вам нужна эта программа, тогда самое время прочитать страницы руководства man flex.
21.3.5. gprof
Программы вроде gprof называются профайлерами. Они предназначены для определения быстродействия вашей программы. Для каждого вызова функции вашей программы профайлер выводит время ее выполнения. Вы как программист анализируете полученную информацию и, если нужно, оптимизируете исходный код вашей программы.