この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
残念ながら、2番目のものは動作しません(ノードプロセスはまだデフォルトのNODE_ENV
で実行されます。
私は何を取りこぼしたか?
Make変数は、デフォルトでmake make ...が呼び出すプロセスの環境にエクスポートされません。しかし、makeのexport
を使ってそれらを強制することができます。変化する:
test: NODE_ENV = test
これに:
test: export NODE_ENV = test
(GNU makeの十分に新しいバージョンがあると仮定して)。
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_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 を参照してください。
テストコマンドを実行するためにローカル変数だけが必要でした。これはbashシェルで複数の環境変数を設定し、ドル記号をmake
でエスケープする例です。
Shell := /bin/bash
.PHONY: test tests
test tests:
PATH=./node_modules/.bin/:$$PATH \
JSCOVERAGE=1 \
nodeunit tests/