Ich möchte dieses Makefile ändern:
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
zu:
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
Leider funktioniert der zweite nicht (der Knotenprozess wird weiterhin mit der Standardeinstellung ausgeführt NODE_ENV
.
Was habe ich verpasst?
shell
makefile
environment-variables
target
Bodokaiser
quelle
quelle
all: <\n\t>export PROJ_ROOT=$(CURDIR)<\n\t>echo $(PROJ_ROOT)<\n>
gibt die richtige Erweiterung für die erste Zeile aus, aber nurecho
für die zweite.PROJ_ROOT
wird nach dem Ausführen von make nicht gesetzt. Leerzeichen=
geben "ungültiger Variablenname" für den Export. Wenn die erste Zeile so vorausgesetzt ist wie in Ihrem Beispiel, wird "Befehle beginnen vor dem ersten Ziel"all:
, was in meinem Beispiel nicht der Fall ist. Mein Beispiel soll wie geschrieben verwendet werden: Es definiert eine zielspezifische Variable und fügt dem Rezept KEINEN Befehl hinzu. Außerdem können Sie nicht gleichzeitig ein Rezept und eine zielspezifische Variable für ein Ziel verwenden: Sie müssen das Ziel zweimal schreiben. Sehen Sie sich das zweite Beispiel in der Frage an und stellen Sie eine neue Frage, wenn dies nicht zur Erklärung beiträgt: In Kommentaren ist nicht genügend Speicherplatz oder Formatierung vorhanden.Wie MadScientist betonte, können Sie einzelne Variablen exportieren mit:
Oder exportieren Sie Variablen für ein bestimmtes Ziel ( zielspezifische Variablen ):
Sie können das
.EXPORT_ALL_VARIABLES
Ziel auch angeben, um - Sie haben es erraten! - ALLE DINGE ZU EXPORTIEREN !!!:Siehe .EXPORT_ALL_VARIABLES
quelle
MY_VAR
s gibt: eine ist Makefile-Variable, auf die zugegriffen wird,${MY_VAR}
und eine andere ist Bash-exportierte Variable, auf die zugegriffen wird als$$MY_VAR
Ich brauchte die Umgebungsvariablen nur lokal, um meinen Testbefehl aufzurufen. Hier ist ein Beispiel, in dem mehrere Umgebungsvariablen in einer Bash-Shell festgelegt und der Dollar-Anmeldung entgangen werden
make
.quelle
Ich würde den ursprünglichen Zieltest neu schreiben und darauf achten, dass die erforderliche Variable IM GLEICHEN UNTERPROZESS als die zu startende Anwendung definiert ist:
quelle