Me gustaría cambiar este 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
a:
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
Lamentablemente, el segundo no funciona (el proceso de nodo todavía se ejecuta con el valor predeterminado NODE_ENV
.
¿Qué me perdí?
shell
makefile
environment-variables
target
bodokaiser
fuente
fuente
all: <\n\t>export PROJ_ROOT=$(CURDIR)<\n\t>echo $(PROJ_ROOT)<\n>
genera la expansión correcta para la primera fila, pero soloecho
para la segunda.PROJ_ROOT
no se establece después de ejecutar make. Los espacios alrededor=
dan "nombre de variable incorrecto" para la exportación. Tener la primera fila como prerrequisito como en su ejemplo da "los comandos comienzan antes del primer objetivo"all:
, que no está en mi ejemplo. Mi ejemplo está destinado a usarse como está escrito: está definiendo una variable específica del objetivo, NO agregando un comando a la receta. Además, no puede usar una receta y una variable específica del objetivo en un objetivo al mismo tiempo: debe escribir el objetivo dos veces. Vea el segundo ejemplo en la pregunta y haga una nueva pregunta si esto no ayuda a explicarlo: no hay suficiente espacio o formato en los comentarios.Como señaló MadScientist , puede exportar variables individuales con:
O exportar variables para un objetivo específico ( variables específicas del objetivo ):
También puede especificar el
.EXPORT_ALL_VARIABLES
objetivo para, ¡lo adivinó! ¡EXPORTAR TODAS LAS COSAS!ver .EXPORT_ALL_VARIABLES
fuente
MY_VAR
s: uno es variable de archivo MAKE accedido como${MY_VAR}
y otro es variable exportada bash, accedido como$$MY_VAR
Solo necesitaba las variables de entorno localmente para invocar mi comando de prueba, aquí hay un ejemplo que configura varios vars de entorno en un shell bash y escapa del signo de dólar
make
.fuente
Volvería a escribir la prueba de destino original, teniendo cuidado de que la variable necesaria se defina EN EL MISMO SUBPROCESO como la aplicación que se iniciará:
fuente