Saya ingin mengubah Makefile ini:
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
untuk:
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
Sayangnya yang kedua tidak berfungsi (proses simpul masih berjalan dengan default NODE_ENV
.
Apa yang saya lewatkan?
shell
makefile
environment-variables
target
Bodokaiser
sumber
sumber
all: <\n\t>export PROJ_ROOT=$(CURDIR)<\n\t>echo $(PROJ_ROOT)<\n>
menampilkan ekspansi yang benar untuk baris pertama, tetapi hanyaecho
untuk yang kedua.PROJ_ROOT
tidak diatur setelah menjalankan make. Spasi sekitar=
memberi "nama variabel buruk" untuk ekspor. Memiliki baris pertama sebagai prasyarat seperti pada contoh Anda memberikan "perintah dimulai sebelum target pertama"all:
, yang tidak ada dalam contoh saya. Contoh saya dimaksudkan untuk digunakan sebagai tertulis: itu mendefinisikan variabel target-spesifik, BUKAN menambahkan perintah ke resep. Anda juga tidak dapat menggunakan resep dan variabel khusus target pada target secara bersamaan: Anda harus menulis target dua kali. Lihat contoh kedua dalam pertanyaan, dan ajukan pertanyaan baru jika ini tidak membantu menjelaskannya: tidak ada cukup ruang atau format dalam komentar.Seperti yang ditunjukkan MadScientist , Anda dapat mengekspor variabel individual dengan:
Atau ekspor variabel untuk target spesifik ( variabel target-spesifik ):
Anda juga dapat menentukan
.EXPORT_ALL_VARIABLES
target untuk — Anda dapat menebaknya! —Ekspor SEMUA HAL !!!lihat .EXPORT_ALL_VARIABLES
sumber
MY_VAR
s: satu adalah variabel makefile diakses sebagai${MY_VAR}
dan satu lagi adalah variabel bash diekspor, diakses sebagai$$MY_VAR
Saya hanya perlu variabel lingkungan secara lokal untuk menjalankan perintah pengujian saya, inilah contoh pengaturan beberapa vars lingkungan dalam bash shell, dan lolos dari dolar masuk
make
.sumber
Saya akan menulis ulang tes target asli, mengurus variabel yang diperlukan didefinisikan DALAM PROSES SUB SAMA sebagai aplikasi untuk memulai:
sumber