이 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_ENV
.
내가 놓친 게 무엇입니까?
답변
Make 변수는 기본적으로 프로세스 호출 환경으로 내 보내지 않습니다. 그러나 make를 사용 export
하여 강제로 그렇게 할 수 있습니다. 변화:
test: NODE_ENV = test
이에:
test: export NODE_ENV = test
(당신은 충분히 현대적인 GNU make> = 3.77 버전을 가지고 있다고 가정합니다).
답변
로 매드 사이언티스트는 지적 , 당신은 개별 변수를 내보낼 수 있습니다 :
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_VARIABLES:
MY_VAR_1 = foo
MY_VAR_2 = bar
MY_VAR_3 = baz
test:
@echo $$MY_VAR_1 $$MY_VAR_2 $$MY_VAR_3
답변
테스트 명령을 호출하기 위해 로컬 환경 변수 만 필요했습니다. 여기 bash 쉘에서 여러 환경 변수를 설정하고 달러 기호를 이스케이프 처리하는 예제가 make
있습니다.
SHELL := /bin/bash
.PHONY: test tests
test tests:
PATH=./node_modules/.bin/:$$PATH \
JSCOVERAGE=1 \
nodeunit tests/
답변
필요한 대상 변수가 동일한 응용 프로그램으로 시작 응용 프로그램으로 정의되어 있는지 확인하면서 원래 대상 테스트를 다시 작성합니다.
test:
( NODE_ENV=test mocha --harmony --reporter spec test )