Архив документации OpenNet.ru /
Раздел "Программирование, языки" /
Индекс
Вперед
Назад
Содержание
Здесь приведен обзор особонностей GNU-версии программы make,
которые отличают ее от других версий, а также заимствованы из других
версий программы make. Мы берем за основу особенности программы make в
системах 4.2 BSD. Если вы заинтересованы в написании переносимых
make-файлов, то вам следует использовать только возможности программы
make, не перечисленные здесь и в главе 13 [Недостающие возможности].
Многие особенности происходят из версии программы make для системы
System V.
- Переменная VPATH и ее специальный смысл. Смотрите раздел 4.3
"Поиск зависимостей по каталогам". Эта особенность существует в
программе make для системы System V, но является
недокументированной. Она документирована в программе make для
сисеты 4.3 BSD (где сообщается, что она имитирует возможности
переменной VPATH из системы System особенности).
- Включаемые make-файлы. Смотрите раздел 3.3 "Включение других
make-файлов". Расширением в GNU-версии является разрешение на
включение нескольких файлов с помошью одной директивы.
- Переменные читаются из командной среды передаются через командную
среду. Смотрите раздел 6.9 "Переменные из командной среды".
- Опции для рекурсивных вызовов программы make передаются через
переменную MAKEFLAGS. Смотрите раздел 5.6.3 "Опции для связи с
порожденным процессом make".
- При работе с архивом, в качестве значения автоматической
переменной $% устанавилается имя элемента архива. Смотрите раздел
10.5.3 "Автоматические переменные".
- Автоматические переменные $@ , $*, $<, $%, и $? имеют,
соответствующие формы вида $(@F) и $(@D). В качестве
напрашивающегося расширения, мы обобщили это и на переменную $^.
Смотрите раздел 10.5.3 "Автоматические переменные".
- Замена обращения к переменную. Смотрите раздел 6.1 "Основы
обращения к переменным".
- Опции командной строки '-b' и '-m' врспринимаются и игнорируются.
В программе make для системы System V эти опции кое-что реально
делают.
- Выполнение рекурсивных команд для запуска программы make через
переменную MAKE, даже если определены опции '-n', '-q' или '-t'.
Смотрите раздел 5.6 "Рекурсивное использование программы make".
- Поддержка суффикса '.a' в суффиксных правилах. Смотрите раздел
11.4 "Архивные суффиксные правила". Эта особенность является
устаревшей в GNU-версии программы make, поскольку общая
возможность построения цепочки правил (смотрите раздел 10.4
"Цепочки неявных правил") позволяет отдельному шаблонному
правилу устанавливать элементы в архиве (смотрите раздел 11.2
"Обновление архива"), и этого достаточно.
- Расположение строк и комбинаций символов backslash и конца строки в
командах сохраняются при печати команд, поэтому они появляются в
таком же виде, как и в make-файле, за исключением удаления
первоначальных пробельных символов.
На реализацию следующих возможностей нас вдохновили всевозможные
другие версии программы make. В некоторых случаях точно неясно, какие
версии повлияли на развитие каких других версий.
- Шаблонное правило с использованием символа '%'. Это было
реализовано в нескольких версиях программы make. Мы не уверены в
том, кто изобрел такую конструкцию первым, но она
распространилось повсюду. Смотрите раздел 10.5 "Определение и
переопределение шаблонных правил".
- Построение цепочки правил и неявных промежуточных файлов. Это
было реализовано Стью Фельдманом в его версии программы make
для системы AT&T Eighth Edition REsearch Unix, а позже - Андрю
Ньюмом из AT&T Bell Labs в его программа mk (где он называет это
"транзитивным замыканием"). Мы, на самом деле, не знаем, взяли ли
мы это от кого-либо из них или же одновременно додумались об этом
сами. Смотрите раздел 10.4 "Цепочки неявных правил".
- Автоматическая переменная $^, содержащая список всех зависимостей
текущей цели. Мы этого не изобретали это, но мы понятия не имеем,
кто это сделал. Смотрите раздел 10.5.3 "Автоматические
переменные". Автоматическая переменная $+ представляет собой
просто расширение переменной $^.
- Опция "А что, если" (`-W' в GNU-версии программы make) была
изобретена (насколько нам известно) Андрю Хьюмом и применена в
программе mk. Смотрите раздел 9.3 "Вместо исполнения команд".
- Концепция выполнения нескольких работ одновременно (параллелизм)
существует во многих реализациях программы make и аналогичных
программах, хотя ее нет в реализациях для систем System V и BSD.
Смотрите раздел 5.2 "Выполнение команд".
- Модифицированное обращение к переменной ссылки с использованием
шаблонной подстановки происходит из системы SunOS 4. Смотрите
раздел 6.1 "Основы обращения к переменным". Такая
функциональность была обеспечена в GNU-версии программы make
посредством функции patsubst, прежде, чем был реализован
альтернативный синтаксис для совместимости с системой SunOS 4.
Здесь не до конца ясно, кто на кого повлиял, так как в GNU-версии
программы make функция patsubst была до того, как былаъ
выпущена система SunOS 4.
- Специальное значение символов '+', предшествующих командным
строкам (смотрите раздел 9.3 "Вместо исполнения команд")
предписано стандартом IEEE 1003.2-1992 (POSIX.2).
- Синтаксис, связанный с конструкцией '+=', предназначенный для
добавления к значению переменной, происходит из программы make
для системы SunOS 4 Смотрите раздел 6.6 "Добавление
дополнительного фрагмента к пеpеменным".
- Синтаксисическая конструкция 'АРХИВ(ЭЛЕМ1 ЭЛЕМ2...)' для
перечисления нескольких элементов одного архивного файла
происходит из программы make для системы SunOS 4. Смотрите раздел
11.1 "Элементы архива".
- Директива -include для включения make-файлов без генерации ошибки
для несуществующего файла происходит из программы make для
системы SunOS 4. (Но обратите внимание, что программа make для
системы SunOS 4 не позволяет нескольким make-файлам быть
указанным в одной директивк -include.)
Оставшиеся возможности - новые изобретения GNU-версии программы
make:
- Использование опции '-v' или '--version' опции для вывода на
экран версии и информации о copyright.
- Использование опцию '-h' или '--help' для вывода на экран полной
полной информации о каждой опции программы make.
- Упрощенно-вычисляемые переменные. Смотрите раздел 6.2 "Две
разновидности переменных".
- Автоматическая передача через переменную MAKE присваиваний
значений переменным в командной строке рекурсивным вызовам
программы make. Смотрите раздел 5.6 "Рекурсивное использование
программы make".
- Использование опции командной строки '-C' или '--directory' для
измения каталога. Смотрите раздел 9.7 "Обзор опций".
- Реализация определений многостроковых переменных при помощи
директивы define. Смотрите раздел 6.8 "Определение
многостроковых переменных".
- Объявление целей, являющихся именами действий, при помощи
специальной цели .PHONY.
Андрю Хьюм из AT&T Bell Labs в своей программе mk реализовал
аналогичную возможность с помощью другого синтаксиса. Это похоже
на случай параллельного открытия. Смотрите раздел 4.4 "Цели-имена
действий".
- Манипуляции с текстом с помощью вызывов функций. Смотрите главу 8
"Функции преобразования текста".
- Использование опции '-o' или '--old-file' для иммитации того, что
время изменения файла старое. Смотрите раздел 9.4 "Предотвращение
перекомпиляции некоторых файлов".
- Условное выполнение.
Эта возможность была реализована много раз в различных версиях
программы make; она выглядит естественным расширением,
наследуемым из возможностей C-препроцессора и аналогичных
макроязыков и не является революционной концепцией. Смотрите
главу 7 "Условные части make-файла".
- Определение пути поиска для включаемых make-файлов. Смотрите
раздел 3.3 "Включение других make-файлов".
- Определение дополнительных make-файлов, подлежащих чтению, с
помощью переменной командной среды. Смотрите раздел 3.4
"Переменная MAKEFILES".
- Удаление из имен файлов ведущей последовательности подстрок './',
поэтому './file' и 'file'рассматриваются как один и тот же файл.
- Использование специального матода поиска для библиотечных
зависимостей, записанных в форме '-lname' Смотрите раздел 4.3.5
"Поиск по каталогам библиотек для компоновки".
- Разрешение суффиксам в суффиксных правилах (смотрите раздел 10.7
"Устаревшие суффиксные правила") содержать любые символы. В
других версиях программы make они должны начинаться с символа '.'
и не содержать ни одного символа '/'.
- Отслеживание текущего уровня рекурсии программы make с
использованием переменной MAKELEVEL. Смотрите раздел 5.6
"Рекурсивное использование программы make".
- Определение статических шаблонных правил. Смотрите раздел 4.10
"Статические шаблонные правила".
- Поддержка выборочного поиска на основе значения переменной vpath.
Смотрите раздел 4.3 "Поиск зависимостей по каталогам".
- Поддержка вычисляемых ссылок на переменные. Смотрите раздел 6.1
"Основы обращения к переменным".
- Обновление make-файлов. Смотрите раздел 3.5 "Как переделываются
make-файлы". Программа make для системы System V имеет очень,
очень ограниченную форму такой функциональности, заключающуюся в
том, что она сравнит выходные SCCS-файлы с make-файлами.
- Различные новые встроенные неявные правила. Смотрите раздел 10.2
"Перечень неявных правил".
- Встроенная переменная MAKE_VERSION показывает номер версии
программы make.
Вперед
Назад
Содержание
Архив документации на OpenNet.ru