Bagaimana cara mendapatkan variabel lingkungan shell di makefile?

102

Di cangkang saat saya masuk

echo $demoPath

itu mencetak

/usr/local/demo

Bagaimana saya bisa mendapatkan nilai variabel ini $demoPathdi makefile?

Jialin
sumber

Jawaban:

152

Jika Anda telah mengekspor variabel lingkungan:

export demoPath=/usr/local/demo

Anda cukup merujuknya dengan nama di makefile( makemengimpor semua variabel lingkungan yang telah Anda setel):

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

Jika Anda belum mengekspor variabel lingkungan, variabel tersebut tidak dapat diakses hingga Anda mengekspornya, atau kecuali Anda meneruskannya secara eksplisit pada baris perintah:

make DEMOPATH="${demoPath}" 

Jika Anda menggunakan turunan C shell, pengganti setenv demoPath /usr/local/demountuk exportperintah.

Jonathan Leffler
sumber
3
"buat impor semua variabel lingkungan yang telah Anda setel". Berhasil! Bagus ~, saya tidak tahu tentang ini sebelumnya, terima kasih banyak.
Jialin
@jonathan_leffler Saya terinspirasi oleh jawaban Anda dan saya melakukan sesuatu yang sedikit berbeda. Aku mengatur envvar sebelum memanggil make tanpa mengekspor: demoPath=/usr/local/demo make. Anda mungkin ingin mengujinya dan mungkin memperbarui jawaban Anda. Bersulang!
AD
@AD Ya, itu adalah mekanisme lain untuk menetapkan nilai variabel lingkungan untuk perintah tertentu. Ini sedikit bersinggungan dengan pertanyaan yang menanyakan bagaimana mengakses nilai variabel yang ada, daripada bagaimana membuatnya dengan cepat. Itu tidak menghentikannya menjadi teknik yang berguna pada kesempatan tertentu.
Jonathan Leffler
10

bagi mereka yang menginginkan beberapa dokumen resmi untuk mengkonfirmasi perilaku tersebut

Variabel dalam make dapat berasal dari lingkungan dimana make dijalankan. Setiap variabel lingkungan yang membuat melihat saat dijalankan diubah menjadi variabel make dengan nama dan nilai yang sama. Namun, penetapan eksplisit dalam makefile, atau dengan argumen perintah, menggantikan lingkungan. (Jika tanda '-e' ditentukan, maka nilai dari lingkungan akan menggantikan penetapan dalam makefile.

https://www.gnu.org/software/make/manual/html_node/Environment.html

Dyno Fu
sumber
6
all:
    echo ${PATH}

Atau ubah PATH hanya untuk satu perintah:

all:
    PATH=/my/path:${PATH} cmd
g10guang.dll
sumber