Makefile'da bir kabuk ortam değişkeni nasıl elde edilir?


107

Girdiğimde kabukta

echo $demoPath

yazdırır

/usr/local/demo

$demoPathMakefile'da bu değişkenin değerini nasıl alabilirim ?

Yanıtlar:


163

Ortam değişkenini dışa aktardıysanız:

export demoPath=/usr/local/demo

makefile( makeayarladığınız tüm ortam değişkenlerini içe aktarır) içindeki adıyla buna basitçe başvurabilirsiniz :

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

Ortam değişkenini dışa aktarmadıysanız, siz onu dışa aktarana kadar veya komut satırından açıkça iletmedikçe erişilemez:

make DEMOPATH="${demoPath}"

Bir C kabuğu türevi kullanıyorsanız setenv demoPath /usr/local/demo, exportkomutu yerine koyun.


3
"make ayarladığınız tüm ortam değişkenlerini içe aktarır". Çalışıyor! Güzel ~, bunun hakkında daha önce hiçbir fikrim yok, çok teşekkür ederim.
Jialin

@jonathan_leffler Cevabınızdan ilham aldım ve biraz farklı bir şey yaptım. Bunu ihraç etmeden markasını çağırmadan önce envvar ayarlayın: demoPath=/usr/local/demo make. Test etmek ve belki cevabınızı güncellemek isteyebilirsiniz. Şerefe!
AD

@AD Evet, bu, belirli bir komut için ortam değişkeni için bir değer ayarlamak için başka bir mekanizmadır. Anında nasıl yaratılacağından ziyade mevcut bir değişkenin değerine nasıl erişileceğini soran soruya biraz teğetseldir. Zaman zaman yararlı bir teknik olmasını durdurmaz.
Jonathan Leffler

12

davranışı onaylamak için bazı resmi belgeler isteyenler için

Make'deki değişkenler make'in çalıştırıldığı ortamdan gelebilir. Başladığında gören her ortam değişkeni aynı isim ve değere sahip bir make değişkenine dönüştürülür. Bununla birlikte, makefile veya bir komut argümanındaki açık bir atama ortamı geçersiz kılar. ('-E' bayrağı belirtilmişse, ortamdaki değerler makefile'daki atamaları geçersiz kılar.

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


6
all:
    echo ${PATH}

Veya sadece bir komut için PATH'i değiştirin:

all:
    PATH=/my/path:${PATH} cmd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.