makefileでシェル環境変数を取得するにはどうすればよいですか?


102

シェルに入ると

echo $demoPath

印刷する

/usr/local/demo

$demoPathmakefile でこの変数の値を取得するにはどうすればよいですか?

回答:


152

環境変数をエクスポートした場合:

export demoPath=/usr/local/demo

makefile(設定makeしたすべての環境変数がインポートされます)で名前で参照できます。

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

環境変数をエクスポートしていない場合は、エクスポートするまで、またはコマンドラインで明示的に渡さない限り、アクセスできません。

make DEMOPATH="${demoPath}" 

Cシェルの派生物を使用している場合はsetenv demoPath /usr/local/demoexportコマンドの代わりに使用してください。


3
「設定すると、設定したすべての環境変数がインポートされます」。いいね〜、これまではわかりませんでした。ありがとうございました。
嘉林2015年

@jonathan_leffler私はあなたの答えに触発され、少し違うことをしました。私はそれをエクスポートせずにmakeを呼び出す前にenvvarを設定しました:demoPath=/usr/local/demo make。あなたはそれをテストして、おそらくあなたの答えを更新したいと思うかもしれません。乾杯!
AD

@ADはい、これは、特定のコマンドの環境変数の値を設定するためのもう1つのメカニズムです。オンザフライで変数を作成する方法ではなく、既存の変数の値にアクセスする方法を尋ねる質問にわずかに接しています。それは時々それが有用な技術であることを止めません。
ジョナサンレフラー

10

公式文書で動作を確認したい人のために

makeの変数は、makeが実行される環境から取得できます。makeが起動時に参照するすべての環境変数は、同じ名前と値を持つmake変数に変換されます。ただし、makefileでの明示的な割り当て、またはコマンド引数による指定は、環境をオーバーライドします。( '-e'フラグが指定されている場合、環境の値がメイクファイルの割り当てをオーバーライドします。

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


6
all:
    echo ${PATH}

または、1つのコマンドについてのみPATHを変更します。

all:
    PATH=/my/path:${PATH} cmd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.