Чтение переменной среды в файле make
У меня есть переменная окружения с именем $MY_ENV_VARIABLE.
Как использовать эту переменную в моем make файле (например), включая некоторые исходные файлы?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
Что-то вроде выше, похоже, не работает.
Примечание: в моем случае это необходимо для создания с Android NDK, но я предполагаю, что это применимо для создания в целом.
Ответы
Ответ 1
Убедитесь, что вы экспортировали переменную из своей оболочки. Продолжительность:
echo $MY_ENV_VARIABLE
показывает, установлен ли он в вашей оболочке. Но чтобы узнать, экспортировали ли вы его, чтобы подсели и другие подкоманды (например, make) могли увидеть, как он пытается запустить:
env | grep MY_ENV_VARIABLE
Если этого не произошло, обязательно запустите export MY_ENV_VARIABLE
перед запуском make.
Это все, что вам нужно сделать: автоматически импортировать все переменные среды в качестве переменных при запуске.
Ответ 2
Просто чтобы добавить некоторую информацию...
Синтаксис для доступа к переменной среды в make похож на другие переменные в make...
#export the variable. e.g. in the terminal,
export MY_ENV_VARIABLE="hello world"
...
#in the makefile (replace before call)
echo $(MY_ENV_VARIABLE)
Выполняет замену перед выполнением commmand. Если вместо этого вы хотите, чтобы замена выполнялась во время выполнения команды, вам нужно избежать $
(Например, echo $MY_ENV_VARIABLE
является неправильным и будет пытаться заменить переменную M
в make и добавить ее в Y_ENV_VARIABLE
)...
#in the makefile (replace during call)
echo $$MY_ENV_VARIABLE
Ответ 3
У меня была аналогичная проблема (под Cygwin):
- Запуск
echo $OSTYPE
в оболочке печатает значение, но
- running
env | grep OSTYPE
не дает никакого вывода.
Поскольку я не могу гарантировать, что эта переменная export
ed на всех машинах, я хочу запустить этот makefile, я использовал следующее, чтобы получить переменную из make файла:
OSTYPE = $(shell echo $$OSTYPE)
Который, конечно, также может использоваться в следующем состоянии:
ifeq ($(shell echo $$OSTYPE),cygwin)
# ...do something...
else
# ...do something else...
endif
EDIT:
Некоторые вещи, которые я нашел после экспериментирования с информацией из jozxyqk answer, изнутри make файла:
- Если я запустил
@echo $$OSTYPE
или @echo "$$OSTYPE"
в рецепте, переменная будет успешно расширена на cygwin
.
- Однако использование этого условия в
ifeq ($$OSTYPE,cygwin)
или ifeq ("$$OSTYPE","cygwin")
не расширяет его.
- Таким образом, логично, что первая установка переменной типа
TEST = "$$OSTYPE"
приведет к печати echo $(TEST)
cygwin
(расширение выполняется вызовом echo
), но это не работает в состоянии - ifeq ($(TEST),cygwin)
false.