Jak ustawić zmienną środowiskową procesu potomnego w pliku Makefile
Chciałbym zmienić ten 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
Do:
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
Niestety drugi nie działa (proces węzła nadal działa z domyślnym NODE_ENV
.
4 answers
Make zmienne nie są eksportowane do środowiska procesów make wywołania... domyślnie. Możesz jednak użyć make ' S export
, aby zmusić ich do tego. Zmiana:
test: NODE_ENV = test
Do tego:
test: export NODE_ENV = test
(zakładając, że masz wystarczająco nowoczesną wersję GNU make > = 3.77 ).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-02 22:56:05
Jak zauważył MadScientist, można eksportować poszczególne zmienne za pomocą:
export MY_VAR = foo # Available for all targets
Lub eksport zmiennych dla określonego celu ( zmienne specyficzne dla celu):
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
Możesz również określić cel .EXPORT_ALL_VARIABLES
-zgadłeś!- WYEKSPORTUJ WSZYSTKO!!!:
.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
Zobacz .EXPORT_ALL_VARIABLES
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-28 18:43:05
Potrzebowałem tylko lokalnych zmiennych środowiskowych, aby wywołać moje polecenie test, oto przykład ustawiania wielu zmiennych środowiskowych w powłoce bash i unikania znaku dolara w make
.
SHELL := /bin/bash
.PHONY: test tests
test tests:
PATH=./node_modules/.bin/:$$PATH \
JSCOVERAGE=1 \
nodeunit tests/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 01:24:58
Napisałbym ponownie oryginalny test docelowy, dbając o to, aby potrzebna zmienna została zdefiniowana w tym samym pod-procesie, co aplikacja do uruchomienia:
test:
( NODE_ENV=test mocha --harmony --reporter spec test )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-03 17:16:04