Як отримати змінну середовища оболонки в makefile?


102

В оболонці, коли я входжу

echo $demoPath

він друкує

/usr/local/demo

Як я можу отримати значення цієї змінної $demoPathу makefile?

Відповіді:


152

Якщо ви експортували змінну середовища:

export demoPath=/usr/local/demo

ви можете просто посилатися на нього по імені в makefile( makeімпортує всі змінні середовища, які ви встановили):

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

Якщо ви не експортували змінну оточення, вона недоступна, поки ви не експортуєте її, або якщо явно не передасте її в командному рядку:

make DEMOPATH="${demoPath}" 

Якщо ви використовуєте похідну C оболонки, заміну setenv demoPath /usr/local/demoдля exportкоманди.


3
"Зробити імпорт усіх встановлених вами змінних середовища". Це працює! Приємно ~, я раніше про це не здогадувався, дуже дякую.
Джаалін

@jonathan_leffler Мене надихнула ваша відповідь, і я зробив щось трохи інше. Я поставив envvar перед викликом зробіть без його експорту: demoPath=/usr/local/demo make. Ви можете перевірити його і, можливо, оновити свою відповідь. Ура!
AD

@AD Так, це ще один механізм встановлення значення змінної середовища для конкретної команди. Це дещо тангенціальне питання, яке задає питання, як отримати доступ до значення існуючої змінної, а не як створити її на льоту. Це не перешкоджає бути корисною технікою при нагоді.
Джонатан Леффлер

10

для тих, хто хоче, щоб якийсь офіційний документ підтвердив поведінку

Змінні в make можуть надходити з середовища, в якому використовується запуск. Кожна змінна середовище, яка бачить, коли вона запускається, перетворюється на змінну make з тим самим іменем та значенням. Однак явне призначення в makefile або з аргументом команди перекриває середовище. (Якщо вказано прапор '-e', то значення з середовища переосмислюють призначення у makefile.

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


6
all:
    echo ${PATH}

Або змінити PATH лише для однієї команди:

all:
    PATH=/my/path:${PATH} cmd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.