$ MY_ENV_VARIABLEという名前の環境変数が設定されています。
Makefile内でこの変数を使用して(たとえば)ソースファイルを含めるにはどうすればよいですか?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
上記のようなものが動作しないようです。
注:私の場合、これはAndroid NDKでビルドするために必要ですが、これは一般的にmakeに適用されると思います。
シェルから変数をエクスポートしたことを確認してください。ランニング:
echo $MY_ENV_VARIABLE
シェルで設定されているかどうかを示します。しかし、サブシェルや他のサブコマンド(makeなど)がそれを表示できるようにエクスポートしたかどうかを確認するには、実行してみます。
env | grep MY_ENV_VARIABLE
そこにない場合は、makeを実行する前にexport MY_ENV_VARIABLE
を実行してください。
それだけで十分です。makeは、起動時にすべての環境変数をmake変数として自動的にインポートします。
情報を追加するだけです...
Makeで環境変数にアクセスする構文は、makeの他の変数と同様です...
#export the variable. e.g. in the terminal,
export MY_ENV_VARIABLE="hello world"
...
#in the makefile (replace before call)
echo $(MY_ENV_VARIABLE)
これは、コマンドを実行する前に置換を実行します。代わりに、コマンド実行中に置換を実行したい場合は、$
をエスケープする必要があります(たとえば、echo $MY_ENV_VARIABLE
は正しくなく、makeで変数M
を置換しようとします、それをY_ENV_VARIABLE
)に追加します...
#in the makefile (replace during call)
echo $$MY_ENV_VARIABLE
私は同じような問題を抱えていました(Cygwinの下で):
echo $OSTYPE
_を実行すると値が出力されますが、env | grep OSTYPE
_を実行しても何も出力されません。メイクファイルを実行するすべてのマシンでこの変数がexport
edであることを保証できないため、以下を使用してメイクファイル内から変数を取得しました。
_OSTYPE = $(Shell echo $$OSTYPE)
_
もちろん、次のような条件でも使用できます。
_ifeq ($(Shell echo $$OSTYPE),cygwin)
# ...do something...
else
# ...do something else...
endif
_
編集:
jozxyqkの答え からの情報を実験した後、すべてmakefile内から見つけたいくつかのこと:
@echo $$OSTYPE
_または_@echo "$$OSTYPE"
_を実行すると、変数は正常にcygwin
に展開されます。ifeq ($$OSTYPE,cygwin)
またはifeq ("$$OSTYPE","cygwin")
のような条件でそれを使用しても、展開されません。TEST = "$$OSTYPE"
_のような変数を設定するとecho $(TEST)
がcygwin
に出力されます(展開はecho
呼び出しによって行われます)が、条件で機能しない-ifeq ($(TEST),cygwin)
はfalseです。