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

Как установить переменную окружения дочернего процесса в 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.

Что я пропустил?

4b9b3361

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