Подтвердить что ты не робот

Чтение переменной среды в файле make

У меня есть переменная окружения с именем $MY_ENV_VARIABLE.

Как использовать эту переменную в моем make файле (например), включая некоторые исходные файлы?

LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so

Что-то вроде выше, похоже, не работает.

Примечание: в моем случае это необходимо для создания с Android NDK, но я предполагаю, что это применимо для создания в целом.

4b9b3361

Ответ 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.