Makefile内でシェルコマンドをすぐに展開したいのですが、シェルコマンドでMakefile内の環境変数にアクセスする必要があります。 $(shell ...)を使用すると、すぐに展開されますが、変数へのアクセスはありません。逆引用符を使用すると、展開が即座に行われるのではなく、後でMakefileに問題が発生します。バッククォートを直ちに展開する方法や、現在の環境を$(シェル)コマンドに渡す方法があるかどうか疑問に思っています。例えばMakefileシェルへの環境変数のエクスポート
、次のメイクファイル:
SOME_VAR := some_val
export SOME_VAR
VAR1 := `echo $$SOME_VAR`
export VAR1
VAR2 := `echo $$VAR1`
all:
@echo VAR1=$(VAR1)
@echo VAR2=$(VAR2)
ウィル出力:私はそれが "VAR2 = some_val" 印刷したい
~/tmp/t2> make
VAR1=some_val
VAR2=`echo $SOME_VAR`
。実際の例はちょっと複雑です(環境変数は親のmakefileから継承されていますが、変数を編集するためにperlスクリプトを使用しようとしています)が、原則は同じです。
何か助けていただければ幸いです。
うーん...はい、私の例には欠陥ました。 ..上記の例では、VAR1はMakefile内で展開されていますが、必要なのはVAR1をシェルスクリプト内で展開することです。つまり、ENV {'VAR1'}にアクセスする必要があるperlスクリプトを呼び出しています。 $(shell ...)から呼び出された場合、スクリプトはVAR1の内容を知らないでしょう。私は良い例で私の質問を編集します。ありがとう。 – John
@ジョン、私は本当にあなたがここで何をしようとしているのか理解できません。私はいくつかの推測をすることができますが、私はあなたの質問を編集すれば速くなると思います。 – Beta
私が実際にやろうとしていること:オブジェクトファイルをビルドし、ビルドされた構成設定に従って名前を付けるmakefileがあります。私は構成設定を名前に変換するperlスクリプトを持っています。これを動作させるためには、perlスクリプトは構成設定にアクセスする必要があります(バッククォートを使用する必要があります)。これはそれ自身では問題ありませんが、別のperlスクリプトでその名前を使用する必要があります。 2番目のスクリプトが実行されるまでに名前が拡張されないため、エラーが発生します。私は回避策を探しています。 – John