Syntax 带引号的复杂makefile语法

Syntax 带引号的复杂makefile语法,syntax,makefile,quotes,Syntax,Makefile,Quotes,我有以下关于makefile规则的开始(感谢其他人的帮助),但它还没有完全起作用: test_svn_version: @if [ $$(svn --version --quiet \ perl -ne '@a=split(/\./); \ print $$a[0]*10000 + $$a[1]*100 + $$a[2]') \ -lt 10600 ]; \ then \ e

我有以下关于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
条件中的单引号似乎是不匹配的

请帮助更正语法。我试过很多变体,但没有一个是正确的

谢谢


-William

您缺少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

该示例在svn命令之后缺少一个管道(|),在echo之后缺少一个反斜杠。这些仅仅是示例中的输入错误,还是源代码中也缺少了这些错误?通常,只使用长行和能够处理这些错误的编辑器,而不是使用大量反斜杠,会更容易。不过,我仍然会将perl命令单独放在一行上。或者将svn版本放入Make变量,并在Make中执行更多逻辑。还有一些比较版本号的工具。您不必解析版本号并将其添加到整数中。。。虽然在这种情况下看起来很简单。