Переменные окружения
Всякий раз, когда выполняется утилита 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-файлов, параметры которых могут определяться динамически.