 
Это команда makeposix, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
make - поддерживать, обновлять и восстанавливать группы программ (ТЕХНОЛОГИИ)
СИНТАКСИС
сделать [−einpqrst] [-f Makefile]... [−k | −S] [макрос=ценностное ...]
[имя_цели...]
ОПИСАНИЕ
The сделать Утилита обновляет файлы, полученные из других файлов. Типичный случай
тот, в котором объектные файлы являются производными от соответствующих исходных файлов. В сделать утилита
исследует временные отношения и обновляет те производные файлы (называемые целями), которые
изменили время раньше, чем время изменения файлов (так называемые предварительные условия)
из которых они получены. Файл описания (makefile) содержит описание
отношения между файлами и команды, которые необходимо выполнить для обновления
цели, чтобы отразить изменения в их предпосылках. Каждая спецификация или правило должны
состоят из цели, необязательных предварительных условий и необязательных команд, которые должны выполняться, когда
предварительное условие новее, чем цель. Есть два типа правил:
1. вывод условиями,, у которых есть одно целевое имя с хотя бы одним ('') и нет
('/')
2. цель условиями,, у которого может быть более одного целевого имени
Помимо вышесказанного, сделать должен иметь набор встроенных макросов и правил вывода, которые
вывести необходимые взаимосвязи для упрощения обслуживания программ.
Чтобы получить именно то поведение, которое описано в этом разделе, пользователь должен убедиться, что
переносимый make-файл должен:
* Включите специальную цель .POSIX
* Опускайте любые специальные цели, зарезервированные для реализаций (начальная точка, за которой следует
прописные буквы), не указанные в этом разделе
Поведение сделать не указано, если одно или оба этих условия не выполняются.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
The сделать утилита должна соответствовать тому Базовые определения POSIX.1-2008, Раздел
12.2, утилита Синтаксис Инструкции, за исключением положения 9.
Поддерживаются следующие варианты:
-e Заставить переменные среды, в том числе с нулевыми значениями, переопределить макрос
назначения в make-файлах.
-f Makefile
Укажите другой файл makefile. Аргумент Makefile это путь к
файл описания, который также называется Makefile. Путь к '-'
будет обозначать стандартный ввод. Может быть несколько экземпляров этой опции,
и они будут обрабатываться в указанном порядке. Эффект от указания
один и тот же аргумент-параметр более одного раза не указан.
−я Игнорировать коды ошибок, возвращаемые вызванными командами. Этот режим такой же, как если бы
специальная цель .ИГНОРИРОВАТЬ были указаны без предварительных условий.
-k Продолжить обновление других целей, которые не зависят от текущей цели, если
не игнорируемая ошибка возникает при выполнении команд, чтобы привести цель в рабочее состояние.
дату.
-n Напишите команды, которые будут выполняться на стандартном выводе, но не выполняются
их. Однако строки с ('+') должен быть выполнен. В этом
режим, строки со знаком at ('@') префикс символа должен быть записан в стандартную
вывод.
-p Записать на стандартный вывод полный набор определений макросов и целевого объекта.
описания. Формат вывода не указан.
-q Возвращает нулевое значение выхода, если целевой файл актуален; в противном случае вернуть
значение выхода 1. Цели не обновляются, если указана эта опция.
Однако командная строка make-файла (связанная с целями) с
знак> ('+') должен быть выполнен.
-r Очистите список суффиксов и не используйте встроенные правила.
-S прекратить сделать если при выполнении команд для приведения цели возникает ошибка
своевременно. Это должно быть по умолчанию и противоположно -k.
−с Не пишите командные строки makefile и не касайтесь сообщений (см. -т) к стандарту
вывод перед выполнением. Этот режим должен быть таким же, как если бы специальная цель
.ТИХИЙ были указаны без предварительных условий.
-т Обновите время модификации каждой цели, как если бы трогать цель было
выполнен. Цели, у которых есть предварительные требования, но нет команд (см. цель Правила), или
которые уже обновлены, не должны затрагиваться подобным образом. Напишите
сообщения в стандартный вывод для каждого целевого файла с указанием имени файла
и что его тронули. Обычно Makefile командные строки, связанные с
каждая цель не выполняется. Однако командная строка с ('+')
префикс должен быть выполнен.
Любые параметры, указанные в СДЕЛАТЬ ФЛАГИ переменная среды должна быть оценена перед любым
варианты, указанные на сделать командная строка утилиты. Если -k и -S варианты оба
указано на сделать служебную командную строку или СДЕЛАТЬ ФЛАГИ переменная среды,
последний указанный вариант имеет приоритет. Если -f or -p варианты появляются в
СДЕЛАТЬ ФЛАГИ переменная окружения, результат не определен.
ОПЕРАНДЫ
Поддерживаются следующие операнды:
имя_цели
Имена целей, как определено в разделе РАСШИРЕННОЕ ОПИСАНИЕ. Если цель не
указано, в то время как сделать обрабатывает make-файлы, первая цель, которая сделать
должны использоваться встречи, которые не являются специальной целью или правилом вывода.
макрос=ценностное
Определения макросов, как они определены в Макрос.
Если же линия индикатора имя_цели и макрос=ценностное операнды смешиваются на сделать служебная команда
строка, результаты не указаны.
СТАНДИН
Стандартный ввод должен использоваться, только если Makefile параметр-аргумент '-'. Смотреть
Раздел ВВОДНЫЕ ФАЙЛЫ.
ВХОД FILES
Входной файл, также известный как make-файл, представляет собой текстовый файл, содержащий правила, макрос
определения и комментарии. См. Раздел РАСШИРЕННОЕ ОПИСАНИЕ.
ОКРУЖАЮЩАЯ СРЕДА ПЕРЕМЕННЫЕ
Следующие переменные среды должны влиять на выполнение сделать:
ДЛИННЫЙ Задайте значение по умолчанию для переменных интернационализации, которые не установлены или
нулевой. (См. Том Базовых определений POSIX.1-2008, Раздел 8.2,
Интернационализация Переменные показатели за приоритет интернационализации
переменные, используемые для определения значений категорий локали.)
LC_ALL Если установлено непустое строковое значение, переопределить значения всех остальных
переменные интернационализации.
LC_CTYPE Определите локаль для интерпретации последовательностей байтов текстовых данных
как символы (например, однобайтовые, а не многобайтовые символы в
аргументы и входные файлы).
LC_MESSAGES
Определите языковой стандарт, который следует использовать, чтобы повлиять на формат и содержимое
диагностические сообщения записываются в стандартную ошибку.
СДЕЛАТЬ ФЛАГИ
Эта переменная должна интерпретироваться как строка символов, представляющая серию
символов опций, которые будут использоваться в качестве опций по умолчанию. Реализация должна
принимать оба следующих формата (но не обязательно принимать их при смешивании):
* Символы являются дополнительными буквами без ведущего персонажи или
разделение, используемое на сделать командная строка утилиты.
* Символы отформатированы аналогично части сделать
командная строка служебной программы: параметрам предшествует персонажи и
-отделяются, как описано в томе Базовых определений
POSIX.1-2008, Раздел 12.2, утилита Синтаксис Инструкции, макрос=ценностное
Также могут быть включены операнды определения макроса. Разница между
содержание СДЕЛАТЬ ФЛАГИ и сделать служебная командная строка заключается в том, что содержимое
переменной не подлежат расширению слова (см. Раздел
2.6, Word расширения), связанный с анализом значений командной строки.
НЛПСАТ Определите расположение каталогов сообщений для обработки LC_MESSAGES.
ПРОЕКТДИР.
Укажите каталог, который будет использоваться для поиска файлов SCCS, не найденных в текущем
каталог. Во всех следующих случаях поиск файлов SCCS выполняется в
каталог СККС в указанном каталоге. Если значение ПРОЕКТДИР.
начинается с , это считается абсолютным путем; иначе,
Значение ПРОЕКТДИР. рассматривается как имя пользователя и инициал этого пользователя
рабочий каталог должен быть проверен на наличие подкаталога SRC or источник, Если такой
каталог найден, он должен быть использован. В противном случае значение используется как относительное
путь.
If ПРОЕКТДИР. не установлен или имеет нулевое значение, поиск файлов SCCS должен быть
сделано в каталоге СККС в текущем каталоге.
Настройка ПРОЕКТДИР. влияет на все файлы, перечисленные в оставшейся части этого
описание утилиты для файлов с компонентом с именем СККС.
Значение SHELL переменная среды не должна использоваться в качестве макроса и не должна
изменен путем определения SHELL макрос в make-файле или в командной строке. Все остальные
переменные среды, в том числе с нулевыми значениями, должны использоваться как макросы, как
определяется в Макрос.
АСИНХРОННЫЙ СОБЫТИЯ
Если еще не проигнорирован, сделать перехватывает SIGHUP, SIGTERM, SIGINT и SIGQUIT и удаляет
текущая цель, если цель не является каталогом или цель не является предпосылкой для
специальная цель .ДРАГОЦЕННЫЙ или если один из -n, -p или -q варианты были указаны. Любой
цели, удаленные таким образом, должны сообщаться в диагностических сообщениях неуказанных
формат, записанный со стандартной ошибкой. После этого процесса очистки, если таковой имеется, сделать примет
стандартное действие для всех остальных сигналов.
стандартный вывод
The сделать утилита должна записывать все команды для выполнения в стандартный вывод, если только −с
была указана опция, команда имеет префикс at-знака или специальную цель
.ТИХИЙ имеет либо текущую цель в качестве предварительного условия, либо не имеет предварительных условий. Если сделать
вызывается без необходимости выполнения какой-либо работы, он должен написать сообщение в стандартное
вывод, указывающий, что никаких действий предпринято не было. Если -т опция присутствует и файл
коснулся, сделать выводит на стандартный вывод сообщение неопределенного формата с указанием
что файл был затронут, включая имя файла.
СТДЕРР
Стандартная ошибка должна использоваться только для диагностических сообщений.
ВЫВОД FILES
Файлы могут быть созданы, когда -т вариант присутствует. Также могут быть созданы дополнительные файлы
коммунальными службами, вызванными сделать.
РАСПРОСТРАНЕНИЯ ОПИСАНИЕ
The сделать утилита пытается выполнить действия, необходимые для того, чтобы указанный
цели актуальны. Цель считается устаревшей, если она старше любого из своих
предварительные условия или если он не существует. В сделать коммунальное предприятие должно рассматривать все предпосылки как
нацелены на себя и рекурсивно проверяют их актуальность, обрабатывая их в
порядок, в котором они появляются в правиле. В сделать утилита должна использовать время модификации
файлов, чтобы определить, устарели ли соответствующие цели.
После сделать удостоверился, что все предварительные условия цели актуальны, и если
target устарел, команды, связанные с целевой записью, должны быть выполнены. Если
для цели не указаны команды, цель должна считаться актуальной.
Makefile Синтаксис
Makefile может содержать правила, определения макросов (см. Макрос), включая строки и комментарии.
Есть два вида правил: вывод условиями, и цель условиями,, сделать коммунальное предприятие должно
содержат набор встроенных правил вывода. Если -r опция присутствует, встроенные правила
не должны использоваться, и список суффиксов должен быть очищен. Дополнительные правила обоих типов могут
быть указанным в make-файле. Если правило определено более одного раза, значение правила
должен быть последним указанным. Макросы также можно определять более одного раза, и
значение макроса указано в Макрос. Комментарии начинаются с ('#')
и продолжайте, пока не появится неэкранированный достигается.
По умолчанию следующие файлы будут проверяться последовательно: ./сделать файл и ./Makefile. Если
ни ./сделать файл or ./Makefile найдены, другие файлы, определенные реализацией, также могут быть
пытался. В XSI-совместимых системах дополнительные файлы ./s.makefile, SCCS / s.makefile,
./s.Makefile и SCCS / s.Makefile также должны быть судимы.
The -f вариант должен направлять сделать игнорировать любой из этих файлов по умолчанию и использовать указанный
вместо этого аргумент как make-файл. Если '-' указан аргумент, стандартный ввод должен быть
используемый.
Термин Makefile используется для ссылки на любые правила, предоставленные пользователем, будь то в
./сделать файл или его варианты, либо указанные -f опцию.
Правила в make-файлах должны состоять из следующих типов строк: целевые правила,
включая специальные мишени (см. цель Правила), правила вывода (см. вывод Правила), макрос
определения (см. Макрос), пустые строки и комментарии.
Правила цели и вывода могут содержать команду линий. Командные строки могут иметь префикс
которые должны быть удалены перед исполнением (см. Makefile Типы).
Когда сбежал (одному предшествует ) находится где угодно в
makefile, за исключением командной строки, строки include или строки, непосредственно предшествующей
включить строку, она должна быть заменена вместе с любыми ведущими пробелами в следующем
линия, с одним . Когда сбежал находится в командной строке в
makefile, командная строка должна содержать , то , а следующий
строка, за исключением того, что первый символ следующей строки не должен быть включен, если это
. Когда сбежал находится в строке включения или сразу в строке
перед строкой включения поведение не указано.
Включают Линии
Если слово включают появляется в начале строки и сопровождается одним или несколькими
символов, строка, образованная оставшейся частью строки, должна обрабатываться как
следует для создания имени пути:
* Конечный и любые комментарии должны быть отброшены. Если результирующая строка
содержит любые символы двойных кавычек ('"') поведение не указано.
* Полученная строка должна быть обработана для раскрытия макроса (см. Макрос.
* Любой символы, которые появляются после первого не- будет использоваться как
разделители для разделения раскрываемой макросом строки на поля. Не указано, были ли
любые другие символы пробела также используются в качестве разделителей. Не указано
есть ли расширение имени пути (см. Раздел 2.13, шаблон Согласование Отзывы) это также
выполнено.
* Если обработка разделителей и необязательное расширение имени пути приводит к нулю
или два или более непустых поля, поведение не указано. Если это приведет к одному
непустое поле, это поле используется в качестве пути.
Если имя пути не начинается с '/' его следует рассматривать относительно текущего
рабочий каталог процесса, а не каталог, содержащий make-файл.
Если файл не существует в этом месте, не указано, были ли дополнительные
каталоги ищутся.
Содержимое файла, указанного в пути, должно читаться и обрабатываться так, как если бы они
появился в make-файле вместо строки include. Если файл заканчивается экранированным
поведение не указано.
Сам файл может содержать дополнительные строки включения. Реализации должны поддерживать вложение
включаемых файлов глубиной не менее 16.
Makefile Типы
Командные строки Makefile должны обрабатываться по очереди.
Командные строки Makefile могут иметь один или несколько из следующих префиксов: a ('-'),
знак ('@') или ('+'). Они должны изменить способ, которым сделать
обрабатывает команду.
- Если префикс команды содержит , или −я вариант присутствует, или
специальная цель .ИГНОРИРОВАТЬ имеет либо текущую цель в качестве предпосылки, либо не имеет
предварительных условий, любая ошибка, обнаруженная при выполнении команды, должна игнорироваться.
@ Если префикс команды содержит знак at и сделать командная строка утилиты -n
опция не указана, или −с опция присутствует, или специальная цель .ТИХИЙ
имеет либо текущую цель в качестве предварительного условия, либо не имеет предварительных требований, команда
не должны записываться в стандартный вывод до его выполнения.
+ Если префикс команды содержит , это указывает на командную строку make-файла
это должно быть выполнено, даже если -n, -q или -т указан.
An казнь линия создается из командной строки путем удаления любых символов префикса. Кроме
как описано под префиксом at-sign, строка выполнения должна быть записана в стандартную
вывод, которому может предшествовать . Затем строка выполнения должна выполняться
оболочку, как если бы она была передана в качестве аргумента система(), за исключением того, что если
ошибки не игнорируются, то оболочка -e опция также будет в силе. Если ошибки
игнорируются для команды (в результате −я вариант, а '-' префикс команды, или
a .ИГНОРИРОВАТЬ специальная мишень), снаряд -e опция не имеет силы. Среда для
выполняемая команда должна содержать все переменные в среде сделать.
По умолчанию, когда сделать получает ненулевой статус от выполнения команды, он должен
заканчиваться сообщением об ошибке до стандартной ошибки.
цель Правила
Целевые правила отформатированы следующим образом:
цель [цель...]: [предпосылка...] [;команду]
[команду
команду
...]
линия которая приносит начинать
Целевые записи указаны -отделенный ненулевой список целей, затем
, потом -отделенный, возможно, пустой список предпосылок. Текст после
, если есть, и все последующие строки, начинающиеся с , являются командой makefile
строки, которые необходимо выполнить для обновления цели. Первая непустая строка, которая не начинается
с или '#' должен начать новую запись. Пустая или пустая строка или начало строки
'#', может начать новую запись.
Приложения должны выбирать целевые имена из набора символов, состоящего исключительно из
точки, подчеркивания, цифры и буквы из переносимого набора символов (см.
Объем базовых определений POSIX.1-2008, Раздел 6.1, Портативная Характер Поставьте).
Реализации могут допускать использование других символов в именах целей в качестве расширений. В
интерпретация целей, содержащих символы '%' и '"' определяется реализацией.
Целевой объект, у которого есть предварительные требования, но не содержит команд, можно использовать для добавления в
список предварительных требований для этой цели. Только одно целевое правило для любой заданной цели может содержать
команды.
Строки, начинающиеся с одного из следующих символов, называются особый направлена против и контролировать
операция по сделать:
.ПО УМОЛЧАНИЮ Если make-файл использует эту специальную цель, приложение должно гарантировать, что он
указывается с командами, но без предварительных требований. Команды должны быть
используется сделать если нет других доступных правил для построения цели.
.ИГНОРИРОВАТЬ Предпосылками этой специальной цели являются сами цели; это вызовет
ошибки из связанных с ними команд следует игнорировать так же, как
определяется −я вариант. Последующие появления .ИГНОРИРОВАТЬ добавит к
список целей, игнорирующих командные ошибки. Если предварительные условия не указаны, сделать
будет вести себя так, как если бы −я была указана опция и ошибки всех команд
связанные со всеми целями, игнорируются.
.POSIX Приложение должно гарантировать, что эта специальная цель указана без
предпосылки или команды. Если он отображается как первая строка без комментариев в
сделать файл, сделать обрабатывает make-файл, как указано в этом разделе;
в противном случае поведение сделать не указано.
.ДРАГОЦЕННЫЙ Предпосылки этой специальной цели не удаляются, если сделать получает один
асинхронных событий, явно описанных в АСИНХРОННЫХ СОБЫТИЯХ
раздел. Последующие появления .ДРАГОЦЕННЫЙ добавлю к списку драгоценных
файлы. Если предварительные условия не указаны, все цели в make-файле должны быть
обрабатывается так, как если бы указано в .ДРАГОЦЕННЫЙ.
.SCCS_GET Приложение должно гарантировать, что эта специальная цель указана без
предпосылки. Если эта специальная цель включена в make-файл, команды
указанный с этой целью должен заменить команды по умолчанию, связанные с
эта специальная цель (см. По умолчанию Правила). Команды, указанные с помощью этого
target используются для получения всех файлов SCCS, которые не найдены в текущем
каталог.
Когда исходные файлы указаны в списке зависимостей, сделать буду относиться к ним справедливо
как и любая другая цель. Поскольку предполагается, что исходный файл присутствует в
каталог, нет необходимости добавлять для него запись в make-файл. Когда
цель не имеет зависимостей, но присутствует в каталоге, сделать примет
что этот файл обновлен. Если, однако, файл SCCS с именем SCCS / с.исходный файл
найден для цели исходный файл, сделать сравнивает отметку времени цели
файл с файлом SCCS / s.source_file чтобы убедиться, что цель актуальна. Если
цель отсутствует, или, если файл SCCS более новый, сделать автоматически
выполнить команды, указанные для .SCCS_GET специальная цель для извлечения
самая последняя версия. Однако, если цель доступна для записи кем-либо, сделать должен
не получить новую версию.
.ТИХИЙ Предпосылками этой специальной цели являются сами цели; это вызовет
связанные с ними команды не должны быть записаны на стандартный вывод раньше
они выполнены. Последующие появления .ТИХИЙ добавит к списку
цели с беззвучными командами. Если предварительные условия не указаны, сделать должен
вести себя так, как будто −с была указана опция, и никаких команд или сенсорных сообщений
связанные с любой целью, должны быть записаны на стандартный вывод.
. СУФФИКСЫ Предпосылки . СУФФИКСЫ должен быть добавлен к списку известных суффиксов и
используются вместе с правилами вывода (см. вывод Правила). если
. СУФФИКСЫ не имеет предпосылок, список известных суффиксов должен быть
очищено.
Особые цели .ИГНОРИРОВАТЬ, .POSIX, .ДРАГОЦЕННЫЙ, .ТИХИЙ и . СУФФИКСЫ указывается
без команд.
Цели с названиями, состоящими из ведущего за которым следуют прописные буквы
"POSIX" а затем любые другие символы зарезервированы для будущей стандартизации. Цели
с именами, состоящими из ведущего за которыми следуют одна или несколько заглавных букв
зарезервировано для расширений реализации.
Макрос
Макроопределения имеют вид:
string1 = [string2]
Макрос с именем string1 определяется как имеющий значение string2, Где string2 is
определяется как все символы, если таковые имеются, после , до символа комментария
('#') или неэкранированный . Любой символы непосредственно перед или после
игнорируются.
Приложения должны выбирать имена макросов из набора символов, состоящего исключительно из
точки, подчеркивания, цифры и буквы из переносимого набора символов (см.
Объем базовых определений POSIX.1-2008, Раздел 6.1, Портативная Характер Поставьте). Макрос
имя не должно содержать . Реализации могут допускать использование других символов в
имена макросов как расширения.
Макросы могут появляться в любом месте make-файла. Макрорасширения с использованием форм $ (string1) Или
${string1} заменяется на string2, следующим образом:
* Макросы в целевых строках должны оцениваться при чтении целевой строки.
* Макросы в командных строках make-файла должны оцениваться при выполнении команды.
* Макросы в строке перед в макроопределении должно быть оценено
когда выполняется назначение макроса.
* Макросы после в макроопределении не должны оцениваться до тех пор, пока
определенный макрос используется в правиле или команде или перед в макросе
определение.
Скобки или фигурные скобки необязательны, если string1 это одиночный символ. Макрос $$
заменяется одиночным знаком '$'. Если string1 в расширении макроса содержит
макрос, результаты не указаны.
Макрорасширения с использованием форм $ (string1[:subst1=[subst2]]) Или
${string1[:subst1=[subst2]]} может использоваться для замены всех вхождений subst1 subst2
когда выполняется подстановка макросов. В subst1 подлежащий замене должен быть признан
когда это суффикс в конце слова в string1 (где словов этом контексте
определяется как строка, разделенная началом строки, , или ).
If string1 в раскрытии макроса содержится расширение макроса, результаты не указаны.
Макрорасширения в string1 строк определения макроса должны оцениваться при чтении. Макрос
расширения в string2 строк определения макроса должны выполняться, когда макрос
идентифицировано string1 раскрывается в правиле или команде.
Макроопределения должны быть взяты из следующих источников в следующей логической
заказ перед чтением make-файлов.
1. Макросы, указанные на сделать в командной строке утилиты в порядке, указанном в
командная строка. Не указано, являются ли внутренние макросы, определенные в внутренний Макрос
принимаются из этого источника.
2. Макросы, определяемые СДЕЛАТЬ ФЛАГИ переменная среды в порядке, указанном в
переменная окружения. Не указано, являются ли внутренние макросы, определенные в
внутренний Макрос принимаются из этого источника.
3. Содержимое среды, исключая СДЕЛАТЬ ФЛАГИ и SHELL переменные и
включая переменные с нулевыми значениями.
4. Макросы, определенные в правилах вывода, встроенных в сделать.
Определения макросов из этих источников не должны переопределять определения макросов из более низкого уровня.
пронумерованный источник. Определения макросов из одного источника (например, сделать утилита
командная строка, СДЕЛАТЬ ФЛАГИ переменная среды или другие переменные среды)
должен иметь приоритет над предыдущими определениями макросов из того же источника.
Макросы, определенные в make-файле (ах), должны иметь приоритет над определениями макросов, которые были перед ними.
в make-файлах и определениях макросов из источника 4. Если -e опция не указана,
макросы, определенные в make-файле (ах), должны иметь приоритет над определениями макросов из источника 3. Макросы
определенные в make-файлах, не должны переопределять макроопределения из источника 1 или источника 2.
Перед чтением make-файлов все сделать параметры командной строки утилиты (кроме -f
и -p) и расширение сделать определения макросов командной строки служебной программы (кроме любых СДЕЛАТЬ ФЛАГИ
макрос), еще не включенный в СДЕЛАТЬ ФЛАГИ макрос, добавляется в СДЕЛАТЬ ФЛАГИ
макрос, заключенный в кавычки способом, определяемым реализацией, так что когда СДЕЛАТЬ ФЛАГИ читается
еще один пример сделать , восстанавливается исходное значение макроса. Другой
параметры и макросы, определяемые реализацией, также могут быть добавлены в СДЕЛАТЬ ФЛАГИ макрос. Если
это изменяет значение СДЕЛАТЬ ФЛАГИ макрос, или, если СДЕЛАТЬ ФЛАГИ макрос изменен в
в любой последующий раз СДЕЛАТЬ ФЛАГИ переменная среды должна быть изменена в соответствии с новым
значение СДЕЛАТЬ ФЛАГИ макрос. Результат установки СДЕЛАТЬ ФЛАГИ в Makefile есть
неопределенные.
Перед чтением make-файлов все сделать определения макросов командной строки служебной программы
(кроме СДЕЛАТЬ ФЛАГИ макрос или SHELL макрос) должен быть добавлен в среду сделать.
Другие переменные, определяемые реализацией, также могут быть добавлены в среду сделать.
The SHELL макрос должен обрабатываться отдельно. Это обеспечивается сделать и установить на
путь к интерпретатору языка команд оболочки (см. sh). SHELL охрана окружающей среды
переменная не должна влиять на значение SHELL макрос. Если SHELL определяется в
makefile или указан в командной строке, он должен заменить исходное значение
SHELL макрос, но не влияет на SHELL переменная окружения. Другие эффекты
определяющий SHELL в make-файле или в командной строке определяются реализацией.
вывод Правила
Правила вывода отформатированы следующим образом:
цель:
команду
[команду]
...
линия которая приносит начинать or #
Приложение должно гарантировать, что цель часть - допустимое имя цели (см. цель
Правила) формы .s2 or .s1.s2 (где .s1 и .s2 суффиксы, которые были даны как
предпосылки . СУФФИКСЫ специальная цель и s1 и s2 не содержат никаких или
символов.) Если есть только один в цели это одинарный суффикс
правило вывода. Цели с двумя точками - это правила вывода с двойным суффиксом. Вывод
правила могут иметь только одну цель перед .
Приложение должно гарантировать, что make-файл не определяет предварительные условия для
правила вывода; никакие символы, кроме пробела, не должны следовать за в
первая строка, кроме случаев создания пустой править, описано ниже. Предпосылки есть
предполагается, как описано ниже.
Правила вывода можно переопределить. Цель, которая соответствует существующему правилу вывода, должна
перезаписать старое правило вывода. Пустое правило можно создать с помощью команды, состоящей из
просто (то есть правило все еще существует и обнаруживается во время вывода правила
поиск, но поскольку он пуст, выполнение не имеет никакого эффекта). Пустое правило также может быть
форматируется следующим образом:
править:;
где ноль или больше персонажи разделяют а также .
The сделать служебная программа использует суффиксы целей и их предпосылки, чтобы сделать вывод о том, как
цель может быть обновлена. Список правил вывода определяет команды, которые должны быть
выполнен. По умолчанию, сделать содержит встроенный набор правил вывода. Дополнительные правила
можно указать в make-файле.
Специальная цель . СУФФИКСЫ содержит в качестве предварительных условий список суффиксов, которые должны
использоваться правилами вывода. Порядок, в котором указываются суффиксы, определяет
порядок, в котором используются правила вывода для суффиксов. Новые суффиксы должны быть
добавляется к текущему списку путем указания . СУФФИКСЫ специальная цель в make-файле. А
. СУФФИКСЫ target без предварительных условий должен очистить список суффиксов. Пустой
. СУФФИКСЫ цель, за которой следует новый . СУФФИКСЫ list необходим для изменения порядка
суффиксы.
Обычно пользователь предоставляет правило вывода для каждого суффикса. Правило вывода
обновить цель с помощью суффикса .s1 от предпосылки с суффиксом .s2 указывается как
цель .s2.s1. Внутренние макросы предоставляют средства для определения общих правил вывода.
(См. внутренний Макрос).
Если не найдено целевого правила для обновления целевого объекта, правила вывода должны быть проверены. В
суффикс цели (.s1), который нужно построить, сравнивается со списком суффиксов, указанным в
. СУФФИКСЫ специальные мишени. Если .s1 суффикс находится в . СУФФИКСЫ, вывод
правила должны просматриваться в порядке, определенном для первого .s2.s1 Правило, предпосылка которого
файл ($ *. s2) существуют. Если цель устарела по отношению к этому предварительному условию,
команды для этого правила вывода должны быть выполнены.
Если цель, которую нужно построить, не содержит суффикса и нет правила для цели,
должны быть проверены правила вывода одного суффикса. Правила вывода с одним суффиксом
определить, как создать цель, если найден файл с именем, которое соответствует имени цели
с добавлением одного из одиночных суффиксов. Правило с одним суффиксом .s2 это определение
как построить цель от цель.s2. Другой суффикс (.s1) считается нулевым.
А ('~') в приведенных выше правилах относится к файлу SCCS в текущем каталоге. Таким образом,
правило .c ~ .o преобразует исходный файл SCCS на языке C в объектный файл (.o).
Потому что s. файлов SCCS - это префикс, он несовместим с сделатьточка суффикса
зрения. Следовательно '~' это способ преобразования любой ссылки на файл в файл SCCS
Справка.
Библиотеки
Если цель или предпосылка содержат круглые скобки, они должны рассматриваться как член
архивная библиотека. Для Lib(член.o) выражение Lib относится к названию архива
библиотека и член.o к имени участника. Приложение должно гарантировать, что член
объектный файл с .o суффикс. Время модификации выражения - это
время модификации члена, хранящегося в архивной библиотеке; видеть ar, .a суффикс
относится к архивной библиотеке. В .s2.а правило должно использоваться для обновления члена в
библиотека из файла с суффиксом .s2.
внутренний Макрос
The сделать Утилита должна поддерживать пять внутренних макросов, которые можно использовать в целевых и
правила вывода. Чтобы четко определить значение этих макросов, некоторые
разъяснение условий цель править, вывод править, цель и предпосылка is
необходимо.
Целевые правила указываются пользователем в make-файле для конкретной цели. Вывод
правила задаются пользователем или сделать-заданные правила для определенного класса целевого имени.
Явные предварительные условия - это предварительные условия, указанные в make-файле в целевых строках.
Неявные предпосылки - это те предпосылки, которые генерируются, когда правила вывода
использовал. Правила вывода применяются к неявным предпосылкам или к явным предпосылкам
для которых не определены целевые правила в make-файле. Применяются целевые правила
для целей, указанных в make-файле.
Перед обновлением какой-либо цели в make-файле все ее предварительные требования (как явные, так и
неявный) должен быть обновлен. Это должно быть выполнено рекурсивной обработкой каждого
предпосылка. После рекурсии каждое предварительное условие должно само стать целью. Его
предпосылки, в свою очередь, должны обрабатываться рекурсивно до тех пор, пока не будет найдена цель, у которой нет
предварительные условия, после чего рекурсия останавливается. Затем рекурсия должна быть сохранена,
обновляя каждую цель по мере ее продвижения.
В следующих определениях слово цель относится к одному из:
* Цель, указанная в make-файле
* Явное предварительное условие, указанное в make-файле, которое становится целью, когда сделать
обрабатывает его во время рекурсии
* Неявная предпосылка, которая становится целью, когда сделать обрабатывает его во время рекурсии
В следующих определениях слово предпосылка относится к одному из следующих:
* Явное предварительное условие, указанное в make-файле для конкретной цели
* Неявное предварительное условие, созданное в результате поиска подходящего вывода.
правило и соответствующий файл, который соответствует суффиксу цели
Пять внутренних макросов:
$ @ $ @ Должен оценивать полное целевое имя текущей цели или
имя файла архива часть цели архива библиотеки. Он должен быть оценен как для
цель и правила вывода.
Например, в .ca правило вывода, $ @ представляет устаревший .a файл в
быть построенным. Точно так же в целевом правиле makefile для сборки библиотека от файл.с, $ @
представляет собой устаревший библиотека.
$% Макрос $% должен выполняться только тогда, когда текущая цель является архивной библиотекой.
член формы имя библиотеки(член.o). В этих случаях $ @ оценивается как
имя библиотеки и $% оценивают как член.o. Макрос $% должен быть оценен для
как цели, так и правила вывода.
Например, в целевом правиле make-файла для сборки библиотека(файл.o), $% представляет
файл.o, в отличие от $ @, которое представляет библиотека.
$? $? макрос должен оценивать список предварительных условий, которые новее, чем
текущая цель. Он должен оцениваться как для целевых правил, так и для правил вывода.
Например, в целевом правиле make-файла для сборки прог от файл1.о, файл2.о и
файл3.о, и где прог не устарело в отношении файл1.о, но вне-
дата в отношении файл2.о и файл3.о, $? представляет файл2.о и файл3.о.
$ <В правиле вывода макрос $ <должен оценивать имя файла, существование которого
позволил выбрать правило вывода для цели. в .ПО УМОЛЧАНИЮ правило,
Макрос $ <должен оценивать текущее целевое имя. Значение макроса $ <
не указывается иначе.
Например, в .ca правило вывода, $ <представляет собой предварительное условие .c .
$ * Макрос $ * должен оценивать текущее имя цели с удаленным суффиксом. Это
должны оцениваться по крайней мере на предмет правил вывода.
Например, в .ca правило вывода, $ *. o представляет устаревший .o файл
что соответствует предварительному условию .c .
Каждый из внутренних макросов имеет альтернативную форму. Когда в верхнем регистре 'D' or 'F' is
добавляется к любому из макросов, значение должно быть изменено на каталог для 'D'
и имя файла для 'F'. Часть каталога - это префикс пути к файлу без символа
конечный ; для текущего каталога часть каталога ''. Когда $? макрос
содержит более одного обязательного имени файла, $ (? D) и $ (? F) (или $ {? D} и $ {? F})
макросы расширяются до списка частей имени каталога и частей имени файла соответственно.
Для цели Lib(член.o) и с2.а Правило, внутренние макросы должны быть определены как:
$< член.s2
$* член
$@ Lib
$? член.s2
$% член.o
По умолчанию Правила
Правила по умолчанию для сделать должен достичь таких же результатов, как если бы следующие
были использованы. Реализации, не поддерживающие утилиты разработки на языке C
вариант может опустить CC, КФЛАГИ, ЯАКК, ЮФЛАГИ, LEX, LFLAGS, ЛДФЛАГС, и .c, .y и .l
правила вывода. Реализации, не поддерживающие FORTRAN, могут опускать FC, ФЛАГИ, и
.f правила вывода. Реализации могут предоставлять дополнительные макросы и правила.
SPECIAL ЦЕЛЕВЫЕ
.SCCS_GET: sccs $ (SCCSFLAGS) получить $ (SCCSGETFLAGS) $ @
.САФФИКСЫ: .o .c .y .l .a .sh .f .c ~ .y ~ .l ~ .sh ~ .f ~
МАКРОСЫ
MAKE = сделать
AR = ar
ARFLAGS = −rv
YACC = yacc
YFLAGS =
LEX = lex
LFLAGS =
LDFLAGS =
CC = c99
CFLAGS = −O
FC = fort77
FFLAGS = −O 1
GET = получить
GFLAGS =
SCCSFLAGS =
SCCSGETFLAGS = −s
SINGLE СУФФИКС ПРАВИЛА
.с:
$ (CC) $ (CFLAGS) $ (LDFLAGS) −o $ @ $
.ф:
$ (FC) $ (FFLAGS) $ (LDFLAGS) −o $ @ $
.ш:
cp $ <$ @
chmod a + x $ @
.c ~:
$ (GET) $ (GFLAGS) −p $ <> $ *. C
$ (CC) $ (CFLAGS) $ (LDFLAGS) −o $ @ $ *. C
.f ~:
$ (GET) $ (GFLAGS) −p $ <> $ *. F
$ (FC) $ (FFLAGS) $ (LDFLAGS) −o $ @ $ *. F
.sh ~:
$ (GET) $ (GFLAGS) −p $ <> $ *. Sh
cp $ *. sh $ @
chmod a + x $ @
ДВОЙНОЙ СУФФИКС ПРАВИЛА
.co:
$ (CC) $ (CFLAGS) −c $
.fo:
$ (FC) $ (FFLAGS) −c $
.Эй:
$ (YACC) $ (YFLAGS) $
$ (CC) $ (CFLAGS) −c y.tab.c
rm -f y.tab.c
mv y.tab.o $ @
.lo:
$ (LEX) $ (LFLAGS) $
$ (CC) $ (CFLAGS) −c lex.yy.c
rm -f lex.yy.c
mv lex.yy.o $ @
.yc:
$ (YACC) $ (YFLAGS) $
mv y.tab.c $ @
.lc:
$ (LEX) $ (LFLAGS) $
mv lex.yy.c $ @
.c ~ .o:
$ (GET) $ (GFLAGS) −p $ <> $ *. C
$ (CC) $ (CFLAGS) −c $ *. C
.f ~ .o:
$ (GET) $ (GFLAGS) −p $ <> $ *. F
$ (FC) $ (FFLAGS) −c $ *. F
.y ~ .o:
$ (GET) $ (GFLAGS) −p $ <> $ *. У
$ (YACC) $ (YFLAGS) $ *. Y
$ (CC) $ (CFLAGS) −c y.tab.c
rm -f y.tab.c
mv y.tab.o $ @
.l ~ .o:
$ (GET) $ (GFLAGS) −p $ <> $ *. L
$ (LEX) $ (LFLAGS) $ *. L
$ (CC) $ (CFLAGS) −c lex.yy.c
rm -f lex.yy.c
mv lex.yy.o $ @
.y ~ .c:
$ (GET) $ (GFLAGS) −p $ <> $ *. У
$ (YACC) $ (YFLAGS) $ *. Y
mv y.tab.c $ @
.l ~ .c:
$ (GET) $ (GFLAGS) −p $ <> $ *. L
$ (LEX) $ (LFLAGS) $ *. L
mv lex.yy.c $ @
.ca:
$ (CC) −c $ (CFLAGS) $
$ (AR) $ (ARFLAGS) $ @ $ *. O
rm −f $ *. o
.fa:
$ (FC) −c $ (FFLAGS) $
$ (AR) $ (ARFLAGS) $ @ $ *. O
rm −f $ *. o
ВЫХОД статус
Когда -q опция указана, сделать утилита должна выйти с одним из следующих
ценности:
0 Успешное завершение.
1 Целевая задача устарела.
> 1 Произошла ошибка.
Когда -q опция не указана, сделать утилита должна выйти с одним из следующих
ценности:
0 Успешное завершение.
> 0 Произошла ошибка.
ПОСЛЕДСТВИЯ OF ОШИБКИ
По умолчанию.
The после разделах информативный.
ЗАЯВЛЕНИЕ ИСПОЛЬЗОВАНИЕ
Если есть исходный файл (например, ./источник.с) и есть два файла SCCS, соответствующие
к нему (./s.source.c и ./SCCS/s.source.c), в XSI-совместимых системах сделать использует SCCS
файл в текущем каталоге. Однако пользователям рекомендуется использовать базовый SCCS.
коммунальные услуги (Администратор, дельта, получитьи т. д.) или СКС утилита для всех исходных файлов в
данный каталог. Если обе формы используются для данного исходного файла, будущие разработчики
очень вероятно, что вы запутаетесь.
Переносимые make-файлы должны указывать .POSIX специальная цель, чтобы
гарантировать, что на них не влияют локальные расширения.
The -k и -S присутствуют оба параметра, так что связь между командной строкой,
СДЕЛАТЬ ФЛАГИ переменная, и make-файл можно точно контролировать. Если k флаг
прошло в СДЕЛАТЬ ФЛАГИ и команда имеет вид:
$ (СДЕЛАТЬ) -S Foo
тогда для ребенка восстанавливается поведение по умолчанию сделать.
Когда -n опция указана, она всегда добавляется к СДЕЛАТЬ ФЛАГИ. Это позволяет рекурсивно
сделать -n цель будет использоваться, чтобы увидеть все действия, которые будут предприняты для обновления цель.
Из-за широко распространенной исторической практики интерпретация ('#') внутри
переменная, поскольку начало комментария имеет нежелательный побочный эффект, делая невозможным
разместить в переменной, таким образом запрещая что-то вроде:
КФЛАГИ = "−D COMMENT_CHAR = '#' "
Многие исторические сделать утилиты перестают связывать правила вывода, когда промежуточный
цель не существует. Например, возможно, что сделать чтобы определить, что оба
.yc и .co может использоваться для преобразования .y к .o. Вместо этого в этом случае сделать требуется
использование .Эй править.
Лучший способ предоставить переносимые make-файлы - это включить все правила, необходимые в
сам makefile. Предоставленные правила используют только функции, предусмотренные другими частями данного
том POSIX.1‐2008. Правила по умолчанию включают правила для необязательных команд в этом
том POSIX.1‐2008. Только правила, относящиеся к командам, которые предоставляются, необходимы в
набор реализации по умолчанию.
Макросы, используемые в других макросах, оцениваются, когда используется новый макрос, а не когда
новый макрос определен. Следовательно:
MACRO = value1
НОВЫЕ = $ (МАКРОС)
MACRO = value2
цель:
echo $ (НОВИНКА)
будет производить value2 и не value1 с НОВЫЕ не был расширен до тех пор, пока он не потребовался в
эхо командная строка.
Известно, что некоторые исторические приложения смешивают имя_цели и макрос = имя
операндов в командной строке, ожидая, что все макросы будут обработаны до любого из
цели решены. Соответствующие приложения этого не делают, хотя некоторые
поддержка обратной совместимости может быть включена в некоторые реализации.
Следующие символы в именах файлов могут вызвать проблемы: знак равно, ':', '' ', одинарные кавычки и
'@'. В include имена файлов, символы соответствия шаблону и '"' также следует избегать, так как
в некоторых реализациях они могут рассматриваться как особые.
Для правил вывода описание $ <и $? кажутся похожими. Однако пример показывает
небольшая разница. В make-файле, содержащем:
фу.о: фу.ч
if фу.ч новее чем фу.о, Но foo.c старше чем фу.о, встроенное правило, чтобы сделать
фу.о от foo.c используется, где $ <равно foo.c и $? равно фу.ч. Если foo.c Также
новее, чем фу.о, $ <равно foo.c и $? равно фу.ч foo.c.
ПРИМЕРЫ
1. Следующая команда:
сделать
делает первую цель, найденную в make-файле.
2. Следующая команда:
сделать хлам
делает цель хлам.
3. Следующий make-файл говорит, что МПГ зависит от двух файлов, ао и бо, и что они
в свою очередь зависят от соответствующих исходных файлов (ac и до нашей эры) и общий файл
вкл. ч:
пгм: ао бо
c99 ао бо −о МПГ
ао: вкл. ч ac
c99 −с ac
бо: вкл. ч до нашей эры
c99 −с до нашей эры
4. Пример создания оптимизированного .o файлы из .c файлы:
.co:
c99 −с −О $ *. c
или:
.co:
c99 −с −О $<
5. Ниже приводится наиболее частое использование интерфейса архива. Здесь предполагается, что
исходные файлы - это все исходники на языке C:
библиотека: lib (файл1.o) lib (файл2.o) lib (файл3.o)
@ Echo Lib is сейчас новейший
The .ca правило используется, чтобы сделать файл1.о, файл2.о и файл3.о и вставьте их в Lib.
Лечение сбежавших персонажи в make-файле являются историческими
упражняться. Например, правило вывода:
.co \
:
работает, а макрос:
f= бар баз \
biz
a:
эхо == $ f ==
отголоски "== бар Баз biz == ".
Если $? мы:
/usr/include/stdio.h /usr/include/unistd.h фу.ч
тогда $ (? D) будет:
/ usr / include / usr / include .
и $ (? F) будет:
стдио.ч unistd.h фу.ч
6. Содержимое встроенных правил можно просмотреть, запустив:
сделать -p -f / DEV / нуль 2> / dev / null
ОБОСНОВАНИЕ
The сделать Утилита, описанная в этом томе POSIX.1-2008, предназначена для предоставления средств
для преобразования переносимого исходного кода в исполняемые файлы, которые можно запускать на
Система, соответствующая POSIX.1-2008. Он отражает наиболее общие функции, присутствующие в System V.
и BSD сделатьs.
Исторически сложилось так, сделать полезность была особенно плодородной почвой для продавцов и
исследовать изменения и расширения синтаксиса для конкретных организаций. Примеры включают:
* Синтаксис, поддерживающий параллельное выполнение (например, от различных поставщиков мультипроцессоров,
GNU и другие)
* Дополнительные `` операторы '', разделяющие цели и их предпосылки (System V, BSD,
и другие)
* Указание командных строк, содержащих строки "$ {MAKE}" и "$ (СДЕЛАТЬ)"
выполнен, когда -n указана опция (GNU и System V)
* Модификации значения внутренних макросов при обращении к библиотекам (BSD и
другие)
* Использование одного экземпляра оболочки для всех командных строк цели (BSD
и другие)
* Разрешение персонажи, а также символы для разделения командных строк (BSD)
* Добавление конструкций `` include '' и `` ifdef '' в стиле препроцессора C (System V, GNU, BSD,
и другие)
* Удаленное выполнение командных строк (Sprite и др.)
* Указание дополнительных специальных целей (BSD, System V и большинство других)
Кроме того, многие поставщики и исследовательские организации переосмыслили основные концепции
сделать, создавая как значительно расширенный, так и совершенно новый синтаксис. Каждый из них
версии сделать удовлетворяет потребности другого сообщества пользователей; это неразумно
чтобы этот том POSIX.1-2008 требовал несовместимого поведения (и
вероятно, уступает) исторической практике для такого сообщества.
В аналогичных обстоятельствах, когда в индустрии достаточно несовместимых форматов
чтобы сделать их несовместимыми, этот том POSIX.1-2008 следует за одним или обоими
два курса действий. Команды были переименованы (CKSUM, эхо и чел) и / или команда
были предоставлены параметры линии для выбора желаемого поведения (GREP, od и чел).
Поскольку синтаксис, указанный для сделать утилита, по большому счету, является подмножеством
синтаксисы, принятые почти всеми версиями сделатьбыло решено, что это будет контр-
продуктивно сменить название. А поскольку сам make-файл является базовой единицей
переносимости, было бы не совсем эффективно зарезервировать новую букву варианта, например
сделать −P, чтобы добиться портативного поведения. Поэтому особая цель .POSIX был добавлен
в make-файл, позволяя пользователям указывать `` стандартное '' поведение. Эта специальная цель
не исключают расширения в сделать утилита, и это не препятствует тому, чтобы такие расширения были
используется make-файлом, определяющим цель; это, однако, исключает любые расширения из
применяется, что может изменить поведение ранее действующего синтаксиса; такие расширения
должны управляться с помощью параметров командной строки или новых специальных целей. Это возложено на
переносимые make-файлы, чтобы указать .POSIX специальная цель, чтобы гарантировать, что они
не зависят от местных расширений.
Портативная версия сделать описанные на этой справочной странице не предназначены для
современный инструмент для создания программного обеспечения и, как таковой, более новый и передовой
функции не были включены. Была сделана попытка описать переносной
makefile способом, который не исключает такие расширения, если они не мешают
портативное поведение, описанное здесь.
Когда -n опция указана, она всегда добавляется к СДЕЛАТЬ ФЛАГИ. Это позволяет рекурсивно
сделать -n цель будет использоваться, чтобы увидеть все действия, которые будут предприняты для обновления цель.
Определение СДЕЛАТЬ ФЛАГИ позволяет использовать как буквенную строку System V, так и команду BSD
форматы строк. Эти два формата достаточно различаются, чтобы позволить реализациям
поддерживайте оба без двусмысленности.
В ранних предложениях говорилось, что `` некотируемый '' рассматривался как начало
комментарий. В сделать Утилита не обращает внимания на котировки. А начинает
комментарий независимо от его окружения.
Текст о `` можно также попробовать другие пути, определенные реализацией '' в дополнение к
./сделать файл и ./Makefile разрешить такие расширения, как SCCS / s.Makefile и другие
вариации. Это было сделано требованием, определяемым реализацией (в отличие от неуказанных
поведение), чтобы выделить неожиданные реализации, которые могут выбрать что-то неожиданное
" У аборигенов / etc / Makefile. XSI-совместимые системы также пытаются ./s.makefile, SCCS / s.makefile,
./s.Makefile и SCCS / s.Makefile.
Ранние предложения содержали макрос NPROC как средство указать, что сделать следует использовать n
процессы для выполнения необходимой работы. Хотя эта функция является ценным расширением для многих
систем, это не обычное использование и может потребовать других нетривиальных расширений для создания файла
синтаксис. Это расширение не требуется для данного тома POSIX.1-2008, но может быть
предоставляется как совместимое расширение. Макрос ПАРАЛЛЕЛЬНО используется некоторыми историческими системами
по существу с тем же значением (но без использования имени, которое является общим системным ограничением
ценить). Предлагается, чтобы разработчики признали существующее использование NPROC и / или
ПАРАЛЛЕЛЬНО как расширение сделать.
Правила по умолчанию основаны на Системе V. По умолчанию CC = Значение c99 вместо cc
поскольку этот том POSIX.1-2008 не стандартизирует утилиту с именем cc. Таким образом,
каждое соответствующее приложение должно будет определить CC =c99 ожидать бежать. Там есть
никаких преимуществ, связанных с надеждой на то, что make-файл может попасть в `` предпочтительный '' компилятор
потому что это не может гарантировать работу. Кроме того, поскольку переносимый makecript может только
использовать c99 options, никаких преимуществ в отношении того, что может делать сценарий, не предоставляется. это
проблема качества реализации относительно того, c99 так же ценно, как cc.
The -d вариант сделать часто используется для получения отладочной информации, но слишком
реализация определяется для добавления к этому тому POSIX.1-2008.
The -p вариант не передан в СДЕЛАТЬ ФЛАГИ на большинстве исторических реализаций и изменить
это привело бы к поломке многих реализаций без достаточного увеличения переносимости.
Команды, начинающиеся с ('+') выполняются, даже если -n опция
настоящее время. На основе версии GNU сделать, поведение -n когда приставка
встречается был расширен, чтобы относиться к -q и -т также. Однако Система V
соглашение о принудительном выполнении команды с помощью -n когда командная строка цели содержит
любая из струн "$ (СДЕЛАТЬ)" or "$ {MAKE}" не был принят. Эта функциональность
появлялись в ранних предложениях, но опасность такого подхода была отмечена
следующий пример части make-файла:
подкаталог:
cd поддиректория; rm все_файлы; $ (СДЕЛАТЬ)
Потеря поведения System V в этом случае хорошо уравновешивается безопасностью, обеспечиваемой
другие make-файлы, которые не знали об этой ситуации. В любом случае командная строка
префикс может обеспечить желаемую функциональность.
Двойной в формате целевого правила поддерживается в системах BSD, чтобы разрешить больше
чем одна целевая строка, содержащая то же целевое имя, чтобы иметь связанные с ней команды.
Поскольку эта функция не описана в SVID или XPG3, она разрешена как
расширение, но не обязательно.
Правила по умолчанию снабжены текстом, указывающим, что встроенные правила должны быть
так же, как если бы использовался перечисленный набор. Цель состоит в том, чтобы реализации могли
использовать правила без изменений, но вам будет разрешено изменять их способами, не влияющими на
основное поведение.
Лучший способ предоставить переносимые make-файлы - это включить все правила, необходимые в
сам makefile. Предоставленные правила используют только функции, предусмотренные другими частями этого
том POSIX.1‐2008. Правила по умолчанию включают правила для необязательных команд в этом
том POSIX.1‐2008. Только правила, относящиеся к командам, которые предоставляются, необходимы в
набор реализации по умолчанию.
Один из пунктов обсуждения заключался в том, следует ли исключить список правил по умолчанию из этого тома
POSIX.1-2008. Они обеспечивают удобство, но не улучшают переносимость приложений.
Основное преимущество заключается в переносимости пользователей, которые хотят печатать сделать команду и
сборка команд из команда.с .
Исторический СДЕЛАТЬ функция была опущена. В некоторых реализациях он используется, чтобы позволить
пользователь переопределяет оболочку, которая будет использоваться для запуска сделать команды. Это сбивало с толку; для
портативный сделать, оболочка должна быть выбрана создателем make-файла или указана в сделать
командная строка, а не запущенный пользователем сделать.
The сделать утилиты в большинстве исторических реализаций обрабатывают предпосылки
target в порядке слева направо, и этого требует формат make-файла. Он поддерживает
стандартная идиома, используемая во многих make-файлах, которые производят Yacc программы; Например:
фу: у.таб.о lex.o main.o
$ (CC) $ (CFLAGS) −о $@ т.таб.о lex.o main.o
В этом примере, если сделать выбрал произвольный порядок, lex.o не может быть сделано с
исправить y.tab.h. Хотя могут быть лучшие способы выразить эти отношения, это
широко используется исторически. Реализации, которые хотят обновлять предварительные требования параллельно
должен потребовать явного расширения для сделать или формат make-файла для этого, как
описано ранее.
Алгоритм определения новой записи для целевых правил частично не определен. Некоторые
исторический сделатьs разрешить пустые, пустые строки или строки комментариев в коллекции команд
отмечен ведущими символы. Соответствующий make-файл должен гарантировать, что каждая команда
начинается с , но реализации могут игнорировать пустые, пустые и комментарии
строки без запуска новой записи.
Раздел АСИНХРОННЫЕ СОБЫТИЯ включает в себя SIGTERM и SIGHUP, а также другие
традиционные SIGINT и SIGQUIT удаляют текущую цель, если не указано иное.
SIGTERM и SIGHUP были добавлены параллельно другим утилитам, которые исторически очищали
повышают свою работу в результате этих сигналов. Когда сделать получает любой сигнал кроме
SIGQUIT, необходимо повторно отправить полученный сигнал, чтобы он завершился с
статус, отражающий сигнал. Результаты SIGQUIT частично не уточнены
потому что в системах, которые создают ядро файлы после получения SIGQUIT, ядро от сделать
будет конфликтовать с ядро файл из команды, которая была запущена, когда SIGQUIT
прибывший. Основная задача заключалась в том, чтобы поврежденные файлы не обновлялись, когда сделать
повторяется.
The .ДРАГОЦЕННЫЙ специальная цель была расширена, чтобы воздействовать на все цели глобально (указав no
предпосылки). В .ИГНОРИРОВАТЬ и .ТИХИЙ специальные цели были расширены, чтобы позволить
предпосылки; было сочтено, что в некоторых случаях более полезно иметь возможность отключать ошибки
или повторение для списка целей, чем для всего make-файла. Эти расширения к сделать in
System V была создана в соответствии с исторической практикой BSD. сделать.
Макросы не экспортируются в среду выполняемых команд. Такого никогда не было
в любом историческом сделать и будет иметь серьезные последствия. Окружающая среда такая же, как
окружающая среда для сделать Кроме этого СДЕЛАТЬ ФЛАГИ и макросы, определенные на сделать командной строки
добавлены.
Некоторые реализации не используют система() для всех командных строк, как того требует
переносимый формат make-файла; в качестве повышения производительности они выбирают строки без оболочки
метасимволы для прямого исполнения Execve(). Нет требования, чтобы система() быть
используется специально, но только для достижения тех же результатов. Метасимволы
обычно используется для обхода прямого Execve() исполнение было любым из:
= | ^ ( ) ; & < > * ? [ ] : $ ` ' " \ \n
По умолчанию в некоторых расширенных версиях сделать состоит в том, чтобы сгруппировать все командные строки для
target и выполнить их, используя единственный вызов оболочки; метод System V - передать
каждая строка индивидуально в отдельную оболочку. Однооболочечный метод имеет преимущества в том, что
производительность и отсутствие требований ко многим непрерывным линиям. Однако преобразование в
этот новый метод вызвал проблемы с переносимостью многих старых make-файлов, поэтому
поведение с make-файлом POSIX определено таким же, как и в System V. Это
предположил, что специальная цель .ОНЕШЕЛЛ использоваться как расширение реализации для
добиться группировки одним снарядом по цели или группе целей.
Начинающие пользователи сделать испытывали трудности с исторической необходимостью начинать команды с
. Поскольку часто бывает сложно различить различия между а также
символов на терминалах или распечатанных списках, могут возникнуть сбивающие с толку ошибки. В ранних предложениях
была предпринята попытка исправить эту проблему, разрешив ведущие персонажи вместо
из символы. Тем не менее, разработчики сообщили о многих make-файлах, которые потерпели неудачу из-за тонких
способов после этого изменения, и трудно реализовать сделать это однозначно может
различать макрос и командную строку. Существует обширная историческая практика
позволяя вести символы перед определениями макросов. Принуждение строк макроса к
Столбец 1 был бы серьезной проблемой обратной совместимости для некоторых make-файлов.
Таким образом, историческая практика была восстановлена.
Есть существенные различия в обработке строк включения разными
реализации. Тем не менее, существует достаточно общности, чтобы стандарт мог
укажите минимальный набор требований, позволяющих использовать функцию переносимо. Известный
вариации были явно названы неопределенным поведением в описании.
Функция динамической зависимости System V не была включена. Он поддерживал бы:
Кот: [электронная почта защищена]
это расширилось бы до;
Кот: кат.с
Эта функция существует только в новой версии System V. сделать и, хотя и полезен, не входит в
широкое использование. Это означает, что макросы раскрываются дважды для предварительных требований: один раз в make-файле.
время синтаксического анализа и один раз во время целевого обновления.
Было рассмотрено добавление метаправил в POSIX. сделать. Это сделало бы % .o: % .c
так же, как .co:. Это довольно полезно и доступно у некоторых поставщиков, но было бы
вызвать слишком много изменений в этом сделать поддерживать. Это привело бы к объединению правил и
новые правила замены. Однако правила для целевых имен были установлены таким образом, чтобы зарезервировать
'%' и '"' символы. Они традиционно используются для реализации метаправил и цитирования
целевые имена соответственно. Разработчикам настоятельно рекомендуется использовать эти символы.
только для этих целей.
Был сделан запрос на расширение символа-разделителя суффикса от любому
персонаж. Функция метаправил в новых версиях сделатьs решает эту проблему в более общем виде.
Этот том POSIX.1-2008 придерживается более консервативного исторического определения.
Стандартный выходной формат для -p вариант не описан, потому что это в первую очередь
вариант отладки и потому, что формат обычно бесполезен для программ. В историческом
реализациях вывод не подходит для использования при генерации make-файлов. В -p формат
был переменным в разных исторических реализациях. Следовательно, определение -p законопроект
только для того, чтобы предоставить согласованно названный вариант получения сделать отладка скрипта
Информация.
Некоторые исторические реализации не очищали список суффиксов с помощью -r.
Реализации должны знать, что некоторые исторические приложения смешали
имя_цели и макрос=ценностное операнды в командной строке, ожидая, что все макросы
обрабатываются до того, как будет обработана какая-либо из целей. Соответствующие приложения не работают
это, но может потребоваться некоторая поддержка обратной совместимости.
Пустые правила вывода указываются с помощью символа команда вместо того, чтобы пропускать все
команды, как описано в раннем предложении. Последний случай не имеет традиционного значения.
и зарезервирован для расширений реализации, таких как GNU сделать.
БУДУЩЕЕ НАПРАВЛЕНИЯ
Нет.
Используйте makeposix онлайн с помощью сервисов onworks.net
 














