2009-12-08 59 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