2014-05-16 79 views
0

是否可以編寫不評估的make規則$(shell)表達式直到前面的操作已經執行完畢?在制定規則中執行

一個人爲的例子:

all : clean 
    echo 'hey' > test 
    echo $(shell cat test) 

clean : 
    rm test 

然後運行make將導致以下錯誤:

cat: test: No such file or directory 
echo 

這個問題似乎是make之前通過的規則去評估shell命令,所以那test還不存在。有沒有解決這個問題的好方法?

作爲背景,我想要做的是編寫一個make規則,檢查一個git存儲庫的不同分支,並以需要評估的方式執行操作。 $(shell git ls-files);但在切換分支之前對git ls-files進行評估。

+0

你可能會說'echo'hey'> test && echo $(shell cat test)'。 – cHao

+0

這根本沒有幫助。 – tripleee

回答

1

微不足道的解決方法是使用shell自己的設施。執行規則時,您已經在運行shell命令。

all: 
    echo 'hey' >test 
    echo $$(cat test) 

(美元符號意味着外殼需要加倍,這是產生使文字美元符號轉義。)

顯然,這可能進一步重構,因爲echouseless;但讓我們認爲它是一個有用的佔位符。

+0

話雖如此,我懷疑你實際上在做什麼可以做得更優雅。關心用實際代碼發佈一個新問題,可能是http://codereview.stackexchange.com/? – tripleee

+0

謝謝!這表明我朝着正確的方向前進。 – petrelharp