Spec-Zone.ru › GNU Make

Несовместимости и отсутствующие возможности

Программы 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, автоматическая переменная $*, появляющаяся в предшественниках правила, имеет удивительно странную «особенность» — расширяется до полного имени цели данного правила. Мы не можем представить, что происходило в умах разработчиков Unix make при принятии такого решения; это совершенно не соответствует обычному определению $*.
  • В некоторых системах Unix make, поиск неявных правил (см. Использование неявных правил) выполняется, по-видимому, для всех целей, а не только для тех, у которых нет рецептов. Это означает, что вы можете сделать следующее:
    foo.o:
            cc -c foo.c
    

    и система Unix make поймет, что foo.o зависит от foo.c.

    Мы считаем, что такое использование некорректно. Свойства предшественников make хорошо определены (по крайней мере, в GNU make), и подобное поведение просто не вписывается в модель.

  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API