Как установить переменную окружения дочернего процесса в Makefile
Я хочу изменить этот Makefile:
SHELL := /bin/bash
PATH := node_modules/.bin:$(PATH)
boot:
@supervisor \
--harmony \
--watch etc,lib \
--extensions js,json \
--no-restart-on error \
lib
test:
NODE_ENV=test mocha \
--harmony \
--reporter spec \
test
clean:
@rm -rf node_modules
.PHONY: test clean
в
SHELL := /bin/bash
PATH := node_modules/.bin:$(PATH)
boot:
@supervisor \
--harmony \
--watch etc,lib \
--extensions js,json \
--no-restart-on error \
lib
test: NODE_ENV=test
test:
mocha \
--harmony \
--reporter spec \
test
clean:
@rm -rf node_modules
.PHONY: test clean
К сожалению, второй не работает (процесс node по-прежнему работает со значением по умолчанию NODE_ENV
.
Что я пропустил?
Ответы
Ответ 1
Сделать переменные не экспортируются в среду процессов make invokes... по умолчанию. Однако вы можете использовать make export
, чтобы заставить их сделать это. Изменение:
test: NODE_ENV = test
:
test: export NODE_ENV = test
(предполагая, что у вас достаточно современная версия GNU make).
Ответ 2
Как отметил MadScientist, вы можете экспортировать отдельные переменные с помощью:
export MY_VAR = foo # Available for all targets
Или экспортировать переменные для конкретной цели (целевой конкретных переменного):
my-target: export MY_VAR_1 = foo
my-target: export MY_VAR_2 = bar
my-target: export MY_VAR_3 = baz
my-target: dependency_1 dependency_2
echo do something
Вы также можете указать цель .EXPORT_ALL_VARIABLES
для - как вы уже догадались! - EXPORT ALL THE THINGS !!!:
.EXPORT_ALL_VARIABLES:
MY_VAR_1 = foo
MY_VAR_2 = bar
MY_VAR_3 = baz
test:
@echo $$MY_VAR_1 $$MY_VAR_2 $$MY_VAR_3
смотрите .EXPORT_ALL_VARIABLES
Ответ 3
Мне потребовались только локальные переменные среды для вызова моей тестовой команды, здесь пример, задающий несколько окружений vars в оболочке bash, и избежание знака доллара в make
.
SHELL := /bin/bash
.PHONY: test tests
test tests:
PATH=./node_modules/.bin/:$$PATH \
JSCOVERAGE=1 \
nodeunit tests/