2009-12-08 61 views
0

我對makefile規則下開始(感謝別人的幫助),但它不是做得比較工作尚未:棘手的makefile語法

test_svn_version: 
    @if [ $$(svn --version --quiet \ 
      perl -ne '@a=split(/\./); \ 
         print $$a[0]*10000 + $$a[1]*100 + $$a[2]') \ 
      -lt 10600 ]; \ 
    then \ 
     echo >&2 "Svn version $$(svn --version --quiet) too old; upgrade to v1.6"; 
     false; \ 
    fi 

似乎在有條件的單引號無法比擬的。

請幫助更正語法。我嘗試了很多變體,但沒有一個看起來是正確的。

謝謝。

- 威廉

+0

該示例缺少svn命令之後的管道(|)和echo之後的反斜槓。這些只是在例子中的拼寫錯誤,還是他們從源頭上錯過了? – 2009-12-08 16:29:49

+0

通常更容易使用長線條和一個可以處理它的編輯器,而不是放入大量反斜槓。不過,我仍然將perl命令放在一行上。或者讓svn版本進入Make變量,並且在make中做更多的邏輯。還有用於比較版本號的工具。您不必解析版本號並將其添加到整數中......雖然在這種情況下看起來很簡單。 – 2009-12-08 21:18:16

回答

2

你錯過SVN和Perl之間的管道|,和你錯過回聲後反斜槓\。這適用於我:

test_svn_version: 
    @if [ $$(svn --version --quiet | \ 
      perl -ne '@a=split(/\./); \ 
         print $$a[0]*10000 + $$a[1]*100 + $$a[2]') \ 
      -lt 10600 ]; \ 
    then \ 
     echo >&2 "Svn version $$(svn --version --quiet) too old; upgrade to v1.6"; \ 
     false; \ 
    fi