0

Makefileでこれをやろうとしています:

VAL=

TARGET1:
    VAL= ... #compute value of VAL
    #run some command that uses the value of VAL
TARGET2:
    $(MAKE) TARGET1
    #run other command that uses the value of VAL

しかし、TARGET! を実行すると VAL の値がリセットされることが判明しました。TARGET2 で完了します。したがって、TARGET2 で他のコマンドを実行しようとすると、VAL の計算値を使用できません。TARGET1 で計算された値を保持する方法はありますか? ありがとう。

4

1 に答える 1

0

あなたは根本的な誤解をしています。VALレシピで設定されている変数TARGET1は、make 変数ではなく、シェル変数です。次のように、代入の構文を別のものに変更すると、有効な make 変数の代入ではあるが、有効なシェル変数の代入ではないことがわかります。

TARGET1:
        VAL := foo

構文エラーが発生します。基本的に make では、レシピ行 (ターゲットの後の TAB 文字で始まる行) は make によってまったく解釈されません。make が呼び出すシェルに渡されます。もちろん、そのシェルで起こったことは、make変数の値などに影響を与えることはできません。

あなたは私たちにあまり詳細を教えてくれません。コマンドが環境から変数を使用するか、コマンドラインを介して変数を使用するかはわかりません。使用しているmakeのバージョンは言いません。GNU make の場合、いくつかのオプションがあります。最も簡単な方法は、常に値を設定することです。シェル構文が必要な場合は、シェル関数を使用できます。

VAL := $(shell #compute value of VAL)

TARGET1:
        #run some command that uses $(VAL)
TARGET2:
        #run another command that uses $(vAL)

より多くの可能性を提供する前に、要件を理解する必要があります。値を設定するTARGET1必要がある場合は、可能な解決策を提供する前に、その理由を知る必要があります。

于 2013-07-18T21:02:17.410 に答える