2016-09-28 1 views
0

私はそれについて何も見つかりませんでした。私はこのルールをMakefileに書き込もうとしています。テキストとしてのMakefile変数の出力

setenv: 
    @echo "export DYLD_LIBRARY_PATH=." 
    @echo "export DYLD_INSERT_LIBRARIES=$(NAME).so" 
    @echo "export DYLD_FORCE_FLAT_NAMESPACE=1" 
    @echo "# Run eval $$(make setenv)" 

は、だから私のターミナルでeval $(make setenv)を実行することにより、環境変数が設定されます。

しかし、無限ループを開始しています。

私はまたしてみました。このための正しい構文は何ですか...

\$(make setenv) 

何も動作しますか?

EDIT:

\$$(make setenv)は、トリックをしました!

+0

達成しようとしていることは何ですか?エクスポートコマンドがエコーされるのはなぜですか? '$$(...)'は '$(...)'に展開されます。これはシェル置換です。 –

+0

最後の行に書いてありますが、コマンドはそれらを起動するために 'eval'を使うようにエコーされます。 '$(shell export ...) 'よりもクリーンであることがわかりました –

+0

Makefileを使って環境変数を他のものに設定しているのなら、シェルスクリプトがうまくいくでしょう。他のレシピのためにそれらの瓶が必要な場合は、私の答えを見てください。 –

答えて

1

あなたが他のレシピのための環境変数を設定している場合は、次の点に注意してください

  • $(shell export ...)を使用すると、動作しません。$(shell ...)常に新しいシェルを起動しますので、それにエクスポートされたものは使用できませんその特定の呼び出しの外側。
  • レシピ内でexportシェルコマンドを使用すると、.ONESHELLが使用されている場合にのみ動作します(推奨されません)。これは、各レシピの行が異なるシェルで実行されるためです。

サブ作るとサブシェルに環境変数をエクスポートする典型的な方法は、このように、Makefileのディレクティブとしてexportを使用することです:外

export DYLD_LIBRARY_PATH=. 
export DYLD_INSERT_LIBRARIES=$(NAME).so 
export DYLD_FORCE_FLAT_NAMESPACE=1 

任意のレシピ。

関連する問題