Несовместимости и отсутствующие возможности
Программы make в различных других системах поддерживают несколько функций, которые не реализованы в GNU make. Стандарт POSIX.2 (IEEE Standard 1003.2-1992), который определяет make, не требует ни одной из этих функций.
- Цель вида ‘file((entry))’ обозначает член архива file. Член выбирается не по имени, а как объект, который определяет символ линковки entry.
Эта функция не была включена в GNU
make, из-за отсутствия модульности при внедрении знаний о внутреннем формате таблиц символов архива. См. Обновление директорий символов архивов. - Суффиксы (используемые в правилах суффиксов), заканчивающиеся символом ‘~’, имеют специальное значение для системы V
make; они ссылаются на файл SCCS, соответствующий файлу без ‘~’. Например, правило суффикса ‘.c~.o’ создаст файл n.o из файла SCCS s.n.c. Для полной поддержки требуется целый ряд таких правил суффиксов. См. Старые правила суффиксов.В GNU
make, весь этот ряд случаев обрабатывается двумя правилами шаблонов для извлечения из SCCS в сочетании с общей функцией цепочки правил. См. Цепочки неявных правил. - В системах V и 4.3 BSD
make, файлы, найденные в результате поискаVPATH(см. Поиск директорий для предшественников), изменяют свои имена внутри рецептов. Мы считаем, что использование автоматических переменных делает эту функцию излишней. - В некоторых системах Unix
make, автоматическая переменная$*, появляющаяся в предшественниках правила, имеет удивительно странную «особенность» — расширяется до полного имени цели данного правила. Мы не можем представить, что происходило в умах разработчиков Unixmakeпри принятии такого решения; это совершенно не соответствует обычному определению$*. - В некоторых системах Unix
make, поиск неявных правил (см. Использование неявных правил) выполняется, по-видимому, для всех целей, а не только для тех, у которых нет рецептов. Это означает, что вы можете сделать следующее:foo.o: cc -c foo.cи система Unix
makeпоймет, что foo.o зависит от foo.c.Мы считаем, что такое использование некорректно. Свойства предшественников
makeхорошо определены (по крайней мере, в GNUmake), и подобное поведение просто не вписывается в модель. - GNU
makeне включает никаких встроенных неявных правил для компиляции или предварительной обработки программ EFL. Если нам станет известно о пользователе EFL, мы с удовольствием добавим их. - По-видимому, в SVR4
make, правило суффикса может быть указано без рецепта и обрабатывается так, как если бы у него был пустой рецепт (см. Пустые рецепты). Например:.c.a:
переопределит встроенное правило суффикса .c.a.
Мы считаем, что для правила без рецепта лучше просто добавить его в список предшественников цели. Приведенный выше пример легко переписать, чтобы получить желаемое поведение в GNU
make:.c.a: ;
- Некоторые версии
makeвызывают оболочку со флагом ‘-e’, за исключением случая ‘-k’ (см. Тестирование компиляции программы). Флаг ‘-e’ сообщает оболочке, что она должна завершиться как только любая запущенная ею программа вернёт ненулевой код. Мы считаем, что для лучшего понимания лучше записать каждую строку рецепта независимо, не требуя такого специального обращения.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Missing.html