Spec-Zone.ru › GNU Make

Выбор оболочки

Программа, используемая в качестве оболочки, взята из переменной SHELL. Если эта переменная не установлена в вашем файле make, то в качестве оболочки используется программа /bin/sh. Аргументы, передаваемые оболочке, берутся из переменной .SHELLFLAGS. Значение по умолчанию для .SHELLFLAGS составляет -c, или -ec в режиме совместимости с POSIX.

В отличие от большинства переменных, переменная SHELL никогда не устанавливается из среды. Это происходит потому, что переменная среды SHELL используется для указания вашего личного выбора программы оболочки для интерактивного использования. Было бы очень плохо, если личные предпочтения влияли на работу файлов make. См. Переменные из среды.

Кроме того, когда вы устанавливаете SHELL в своём файле make, это значение не экспортируется в среду для строк команд, которые make вызывает. Вместо этого экспортируется значение, унаследованное от среды пользователя, если таковое имеется. Вы можете переопределить это поведение, явно экспортировав SHELL (см. Передача переменных в под-make), заставляя его передаваться в среду строкам команд.

Однако в MS-DOS и MS-Windows значение SHELL в среде используется, поскольку на этих системах большинство пользователей не устанавливают эту переменную, и, следовательно, она, скорее всего, установлена специально для использования make. В MS-DOS, если значение SHELL не подходит для make, вы можете установить переменную MAKESHELL в оболочку, которую make должен использовать; если установлено, она будет использоваться вместо значения SHELL.

Выбор оболочки в DOS и Windows

Выбор оболочки в MS-DOS и MS-Windows намного сложнее, чем на других системах.

В MS-DOS, если SHELL не установлена, используется значение переменной COMSPEC (которая всегда установлена).

Обработка строк, устанавливающих переменную SHELL в файлах Make, отличается в MS-DOS. Стандартная оболочка command.com чрезвычайно ограничена в своих возможностях, и многие пользователи make склонны устанавливать замену оболочки. Поэтому в MS-DOS make проверяет значение SHELL, и изменяет свое поведение в зависимости от того, указывает ли оно на оболочку типа Unix или DOS. Это позволяет получить разумные функции, даже если SHELL указывает на command.com.

Если SHELL указывает на оболочку типа Unix, make в MS-DOS дополнительно проверяет, можно ли найти эту оболочку; если нет, она игнорирует строку, устанавливающую SHELL. В MS-DOS GNU make ищет оболочку в следующих местах:

  1. В точном месте, указанном значением SHELL. Например, если в файле make указано «SHELL = /bin/sh», make будет искать в каталоге /bin на текущем диске.
  2. В текущем каталоге.
  3. В каждом из каталогов в переменной PATH, в порядке.

В каждом каталоге, который он проверяет, make сначала ищет конкретный файл (sh в приведённом выше примере). Если этого не найдено, он также будет искать этот файл в этом каталоге с одним из известных расширений, которые идентифицируют исполняемые файлы. Например, .exe, .com, .bat, .btm, .sh, и некоторые другие.

Если любая из этих попыток окажется успешной, значение SHELL будет установлено в полном пути к оболочке, как найдено. Однако, если ни одна из этих попыток не увенчается успехом, значение SHELL не изменится, и, таким образом, строка, которая её устанавливает, будет эффективно проигнорирована. Это делается для того, чтобы make поддерживал функции, специфичные для оболочки типа Unix, только если такая оболочка фактически установлена на системе, на которой make работает.

Обратите внимание, что этот расширенный поиск оболочки ограничен случаями, когда SHELL устанавливается из файла make; если он установлен в среде или в командной строке, ожидается, что вы установите его в полный путь к оболочке, точно так же, как это делается в Unix.

Эффект вышеописанной обработки, специфичной для DOS, заключается в том, что файл make, содержащий «SHELL = /bin/sh» (как это делают многие файлы make в Unix), будет работать в MS-DOS без изменений, если у вас, например, установлена sh.exe в каком-либо каталоге в вашей PATH.

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/Choosing-the-Shell.html

Spec-Zone.ru

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