2011-12-24 152 views
2

我想將shell命令的輸出分配給make變量。 這是我的嘗試:將shell(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:命令未找到 所以shell字符串被翻譯成正確的值(1.3.0),但之後失敗。

我還試圖宣佈:

PHONE_VER = 

,然後在命令: $ {PHONE_VER} = $(殼貓d:/路徑/到/工作區/普通/ PhoneGap的/ VERSION) 或者使用:=或+ =。沒有工作

我用的cygwin(在Win 7)GNU使3.81

我發現this question和答案 - 但是這似乎並沒有爲我工作。 我明顯錯過了一些東西(可能是基本的),但經過一天的試驗後,我不知道最缺的部分是什麼。

回答

6

您不能在規則配方中分配變量。 第一個可能的解決方案是什麼地方初始化它的規則外,然後用它作爲常規:

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 

這將正常工作儘可能PHONE_VER是遞歸擴展(注意分配的=號),和在滿足pull_phonegap先決條件後,將出現shell cat ...的實際調用。

另一種可能是讓PHONE_VER可變target-specificphonegap

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

最後,如果你想要做的唯一的事情就是打印下載回購的版本,那麼它會更容易擺脫變量都:

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

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

謝謝!很好的答案 - 很好的書面,澄清和多種選擇。榮譽 – alonisser 2011-12-24 13:43:25

+0

不客氣! :) – 2011-12-24 13:45:28

1

因爲配方在shell中運行,你可以通過& &結合命令:

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

別忘了用$$而不是單$

相關問題