Операционная система UNIX. Руководство программиста

     

Переменные окружения


Всякий раз, когда выполняется утилита make, читаются и добавляются к макроопределениям переменные окружения. Чтобы пользоваться этим механизмом должным образом, важнее всего рассмотреть приоритетность различных определений. Ниже описывается взаимодействие make'а с окружением. Утилита make поддерживает макрос MAKEFLAGS. Данный макрос определяется как цепочка, состоящая из всех входных аргументов-флагов (без знаков -). Макрос экспортируется и тем самым становится доступным вложенным за- пускам make'а. Флаги командной строки и присваивания, содержащиеся в make-файле, обновляют значение MAKEFLAGS. Чтобы описать, как окружение взаимодействует с утилитой make, необходимо рассмотреть макрос MAKEFLAGS.

Выполняясь, make формирует макроопределения в следующем порядке:

  • Читает переменную окружения MAKEFLAGS. Если она отсутствует либо пуста, внутренняя переменная утилиты make MAKEFLAGS устанавливается равной пустой цепочке. В противном случае каждая буква в значении переменной окружения MAKEFLAGS считается входным аргументом-флагом и соответствующим образом обрабатывается. (Исключение составляют опции -f, -p и -r.)
  • Читает встроенный список макроопределений.
  • Читает окружение. Переменные окружения трактуются как макроопределения и помечаются как экспортируемые (в смысле shell'а).
  • Читает make-файл (файлы). В первую очередь учитываются присваивания, указанные в make-файлах, а не в окружении. Такой порядок выбран для того, чтобы при чтении и обработке make-файла результат был предсказуем. Данное соглашение выполняется, если только не используется опция -e, задающая приоритет окружения. Если имеется явное присваивание переменной MAKEFLAGS, оно также учитывается в первую очередь. Эта возможность бывает удобна при вложенных запусках утилиты make из текущего make-файла.

Полезно привести список приоритетов присваиваний. Ниже перечисляются установки макропределений в порядке возрастания их старшинства:

  • Внутренние макроопределения.
  • Окружение.
  • Файл (файлы) с описаниями.
  • Командная строка.

Использование опции -e приводит к некоторому изменению порядка:

  • Внутренние макроопределения.
  • Файл (файлы) с описаниями.
  • Окружение.
  • Командная строка.

Описанный порядок достаточно универсален, чтобы позволить программисту задать make-файл или набор make-файлов, параметры которых могут определяться динамически.



Содержание раздела