2013-05-31 19 views
19

名前$ MY_ENV_VARIABLEの環境変数が設定されています。makeファイル内の環境変数を読み取る

私のメークファイル内でこの変数を使用して(たとえば)いくつかのソースファイルを含めるにはどうすればよいですか?

LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so 

上記のようなものは動作していないようです。

注:私の場合、これはAndroid NDKでのビルドに必要ですが、一般的にはこれが該当します。

+0

正常に動作するはずです。変数が設定されていますか? – Matthias

+1

@Sander、宣言された変数は動作するはずです。また、=の代わりに=を使用してスペースを削除することもできます... makeの呼び出しで-eオプションを試しましたか? 、-e:環境変数を優先させます... – nsd

答えて

11

シェルから変数をエクスポートしたことを確認してください。実行中:

echo $MY_ENV_VARIABLE 

あなたのシェルに設定されているかどうかを示します。しかし、サブシェルと(メイクなどの)他のサブコマンドは、それが実行してみてください見ることができるようにあなたがそれを輸出してきたかどうかを知るために:

env | grep MY_ENV_VARIABLE 

それがない場合は、makeを実行する前にexport MY_ENV_VARIABLEを実行するようにしてください。

これですべてのことができます。makeは起動時にすべての環境変数をmake変数として自動的にインポートします。メイクで環境変数にアクセスするための

+0

'csh'では' setenv MY_VAR my_val'です – mpen

15

ただ、いくつかの情報を追加するために...

構文はメイクで他の変数のようなものです...

#export the variable. e.g. in the terminal, 
export MY_ENV_VARIABLE="hello world" 

... 

#in the makefile (replace before call) 
echo $(MY_ENV_VARIABLE) 

これはcommmandを実行する前に置換を行います。かわりに、置換は、コマンドの実行中に発生する場合は、$(例えば、echo $MY_ENV_VARIABLEが間違っているとメイクで変数Mを代用し、Y_ENV_VARIABLEにそれを追加しようとします)...

をエスケープする必要があります
#in the makefile (replace during call) 
echo $$MY_ENV_VARIABLE 
3

私はちょうど(Cygwinの下)同様の問題があった:

  • env | grep OSTYPEは、任意の出力を与えるものではありません実行しているシェルプリント上echo $OSTYPE値が、
  • を実行します。私は、この変数は、私がそのメイクファイルを実行するすべてのマシン上export EDであることを保証することはできませんのよう

は、私はメイクファイル内から変数を取得するために、次の使用:

OSTYPE = $(shell echo $$OSTYPE) 

どの

ifeq ($(shell echo $$OSTYPE),cygwin) 
# ...do something... 
else 
# ...do something else... 
endif 

EDIT:

012のコースも、次のような条件の中で使用することができます私はすべてのメイクファイルの中から、 jozxyqk's answerからの情報を使って実験後に発見されたの

いくつかのもの:私はレシピに@echo $$OSTYPEまたは@echo "$$OSTYPE"を実行すると、変数が正常にcygwin

  • を拡大しています。
  • ただし、ifeq ($$OSTYPE,cygwin)ifeq ("$$OSTYPE","cygwin")のような条件で使用しても展開されません。
  • したがって、最初TEST = "$$OSTYPE"のような変数を設定することcygwinを印刷echo $(TEST)につながる(拡大はecho呼び出しによって行われます)が、それは条件では動作しないことを論理的である - ifeq ($(TEST),cygwin)はfalseです。
関連する問題