2011-12-24 20 views
2

シェルコマンドの出力をmake変数に割り当てたいとします。 これは私が試したものです:シェル(CYGWIN)コマンドの出力をMake変数に割り当てる

phonegap: 
    #download new phonegap 
    cd ${SOURCE_PHONEGAP};git pull 
    PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION) 
    echo phonegap version: ${PHONE_VER} 

私は、次を取得し、コマンドラインからmakeを実行する場合:

PHONE_VERは= 1.3.0 メイク:PHONE_VER:コマンドは ので、シェルの文字列が見つかりません正しい値(1.3.0)に変換されますが、それ以降は何かが失敗します。

Iはまた、宣言試み:

PHONE_VER = 

して、コマンドで: $ {PHONE_VER} = $(シェル猫D:/パス/に/ワークスペース/共通/ PhoneGapの/ VERSION) または=または+ =を使用します。しかし、これは私のために動作するようには思えない - 私はGNUで3.81

私はthis questionと答えた作り(7勝利に)cygwinのを使用してい

を動作しませんでした。 私は明らかに(おそらく基本的な)何かを見逃していますが、実験の日の後に私は欠けている部分が何か分からない。

答えて

6

ルールレシピ内で変数を割り当てることはできません。 最初の可能な解決策はルール外のどこかでそれを初期化し、その後、通常のようにそれを使用することです:これは罰金限り再帰的に展開されてPHONE_VERとして動作します

PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION) 

phonegap: pull_phonegap 
    @echo phonegap version: ${PHONE_VER} 

pull_phonegap: 
    @cd ${SOURCE_PHONEGAP}; git pull 

(割り当てで=記号に注意)、および実際に起動するshell cat ...は、pull_phonegapの前提条件を満たした後に表示されます。あなたがしたい唯一のことは、ダウンロードしたレポのバージョンを印刷する場合

phonegap: PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION) 
phonegap: pull_phonegap 
    @echo phonegap version: ${PHONE_VER} 

最後に、取り除くために容易になるだろう:

他の可能性がphonegapためPHONE_VER変数target-specific作るですすべての変数:

phonegap: pull_phonegap 
    @echo phonegap version: 
    @cat ${SOURCE_PHONEGAP}/VERSION 

pull_phonegap: 
    @cd ${SOURCE_PHONEGAP}; git pull 
+0

感謝の$$使用することを忘れないでください!素晴らしい答え - きれいに書かれ、明確化され、複数のオプションがあります。忠告 – alonisser

+0

あなたは大歓迎です! :) –

1

レシピはシェルで実行されているので、あなたが& &てコマンドを組み合わせることができます。

PHONE_VER=`cat d:/path/to/workspace/common/phonegap/VERSION` && echo phonegap version: $${PHONE_VER} 

ではなく、単一の$