Книга: Основы программирования в Linux
Версия GNU команд make и gcc
Версия GNU команд make и gcc
Для GNU-команды make
и GNU-компилятора gcc
существуют две интересные дополнительные опции.
? Первая — опция -jN
("jobs") команды make
. Она позволяет make
выполнять N
команд одновременно. Там, где несколько разных частей проекта могут компилироваться независимо, команда make
запускает несколько правил в одно и то же время. В зависимости от конфигурации вашей системы эта возможность может существенно сократить время, затраченное на перекомпиляцию. Если у вас много исходных файлов, может быть стоит воспользоваться этой опцией. Как правило, небольшие числа, например -j3
, — хорошая отправная точка. Если вы делите компьютер с другими пользователями, применяйте эту опцию с осторожностью. Другие пользователи могут не одобрить запуск большого количества процессов при каждой вашей компиляции!
? Второе полезное дополнение — опция -MM
для gcc
. Она формирует список зависимостей в форме, подходящей для команды make
. В проекте со значительным числом исходных файлов, каждый из которых содержит разные комбинации заголовочных файлов, бывает трудно (но крайне важно) корректно определить зависимости. Если сделать каждый исходный файл зависимым от всех заголовочных файлов, иногда вы будете компилировать файлы напрасно. С другой стороны, если вы пропустите какие-то зависимости, возникнет еще более серьезная проблема, поскольку в этом случае вы не откомпилируете заново те файлы, которые нуждаются в перекомпиляции.
Выполните упражнение 9.5.
Упражнение 9.5. Использование gcc -MM
В этом упражнении вы примените опцию -MM
в программе gcc
для генерации списка зависимостей вашего примера:
$ gcc -MM main.с 2.с 3.с
main.о: main.c a.h
2.о: 2.с a.h b.h
3.o: 3.с b.h c.h
$
Как это работает
Компилятор gcc
просто просматривает исходные файлы, ищет заголовочные файлы и выводит требующиеся строки зависимостей в формате, готовом к вставке в make- файл. Вы должны лишь сохранить вывод во временном файле и затем вставить его в make-файл, чтобы иметь безошибочный набор зависимостей. Если вы пользуетесь копией, полученной от gcc
, для появления ошибок в ваших зависимостях просто нет оснований!
Если вы хорошо знакомы с make-файлами, можно попробовать применить средство makedepend
, которое выполняет функцию, аналогичную опции -MM
, но вставляет полученный список зависимостей в конец реального заданного вами make-файла.
Перед завершением темы make-файлов, быть может, стоит подчеркнуть, что не следует ограничивать применение make-файлов только компиляцией кода и созданием библиотек. Их можно использовать для автоматизации любой задачи, в которой есть последовательность команд, формирующих из входного файла некоторого типа выходной файл. Типичным "некомпиляционным" применением может быть вызов программ awk
, или sed
для обработки некоторых файлов или генерация интерактивного справочного руководства. Вы можете автоматизировать практически любую обработку файлов, если на основании информации о дате и времени модификации файла можете определить, какие из файлов были изменены.
Другая возможность управления вашими сборками или на самом деле другой способ автоматизации задач — утилита ANT. Это средство на базе языка Java, использующее файлы конфигурации, написанные на языке XML. Ее обычно не применяют в ОС Linux для автоматизации создания исполняемых файлов из файлов на языке С, поэтому мы не будем обсуждать ее в книге. Более подробную информацию об ANT можно найти на Web-сайте http://ant.apache.org/.
- Инструмент командной строки gbak
- Миграция между различными версиями InterBase
- Инструмент командной строки gfix
- 5.4 Команда trap: обработка прерываний
- Возможности, планируемые к реализации в следующих версиях
- Версия 1.5 - эволюция или революция?
- Новая версия ODS
- Appendix H. GNU Free Documentation License
- Appendix I. GNU General Public License
- Глава 10 Возможности подсистемы хранения данных в различных версиях Windows NT
- 4.3.3. Makefile Targets
- Команды и формирование культуры по инициативе сверху