Как установить переменную среды в 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

to:

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_ENV.

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

3 76

3 ответа:

Make переменные не экспортируются в среду процессов make вызывает... по умолчанию. Однако вы можете использовать это export чтобы заставить их сделать это. Изменение:

test: NODE_ENV = test

для этого:

test: export NODE_ENV = test

(предполагая, что у вас есть достаточно современная версия GNU make).

как MadScientist указал, вы можете экспортировать отдельные переменные:

export MY_VAR = foo

вы также можете указать .EXPORT_ALL_VARIABLES цель-вы угадали!- ЭКСПОРТИРУЙТЕ ВСЕ ВЕЩИ!!!:

.EXPORT_ALL_VARIABLES:

MY_VAR = foo

test:
  @echo $$MY_VAR

посмотреть .EXPORT_ALL_VARIABLES

мне нужны были только переменные среды локально для вызова моей тестовой команды, вот пример установки нескольких vars среды в оболочке bash и выхода из знака доллара make.

SHELL := /bin/bash

.PHONY: test tests
test tests:
    PATH=./node_modules/.bin/:$$PATH \
    JSCOVERAGE=1 \
    nodeunit tests/