Gostaria de mudar 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
para:
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
Infelizmente, o segundo não funciona (o processo do nó ainda é executado com o padrão NODE_ENV
.
Do que eu senti falta?
shell
makefile
environment-variables
target
bodokaiser
fonte
fonte
all: <\n\t>export PROJ_ROOT=$(CURDIR)<\n\t>echo $(PROJ_ROOT)<\n>
gera a expansão correta para a primeira linha, mas apenasecho
para a segunda.PROJ_ROOT
não está definido após a execução do make. Os espaços ao redor=
dão "nome de variável inválido" para exportação. Ter a primeira linha como pré-requisito, como no seu exemplo, fornece "comandos iniciados antes do primeiro destino"all:
, o que não está no meu exemplo. Meu exemplo deve ser usado como está escrito: está definindo uma variável específica do alvo, NÃO adicionando um comando à receita. Além disso, você não pode usar uma receita e uma variável específica do alvo em um alvo ao mesmo tempo: você deve escrever o alvo duas vezes. Veja o segundo exemplo da pergunta e faça uma nova pergunta se isso não ajudar a explicá-la: não há espaço ou formatação suficiente nos comentários.Como o MadScientist apontou , você pode exportar variáveis individuais com:
Ou exporte variáveis para um destino específico ( variáveis específicas do destino ):
Você também pode especificar o
.EXPORT_ALL_VARIABLES
destino para - você adivinhou! - EXPORTAR TODAS AS COISAS !!!:consulte .EXPORT_ALL_VARIABLES
fonte
MY_VAR
s: um é variável makefile acessado como${MY_VAR}
e outra é o bash exportados variável, acessado como$$MY_VAR
Eu só precisava das variáveis de ambiente localmente para invocar meu comando de teste, aqui está um exemplo de configuração de vários vars de ambiente em um shell bash e escapando do sinal de cifrão
make
.fonte
Reescreveria o teste de destino original, cuidando para que a variável necessária seja definida NO MESMO SUB-PROCESSO como o aplicativo a ser iniciado:
fonte