2009-12-08 12 views
43

मैं अपने मेकफ़ाइल में एक शर्त का पता लगाने के लिए चाहता हूं जहां एक उपकरण गलत संस्करण है और त्रुटि को त्रुटि संदेश के साथ विफल करने के लिए मजबूर करना है, यह इंगित करता है कि आइटम सही संस्करण नहीं है।एक gnumake फ़ाइल में त्रुटि को कैसे बल दें

क्या कोई इसे करने का उदाहरण दे सकता है?

मैं निम्नलिखित की कोशिश की लेकिन यह सही वाक्य रचना नहीं है:

ifeq "$(shell svnversion --version | sed s/[^0-9\.]*://)" "1.4" 
$error("Bad svnversion v1.4, please install v1.6") 
endif 

धन्यवाद।

+0

आप चाहते हो सकता है 1.4 के खिलाफ यह जांचने के लिए। मेरे पास 1.4.4 इंस्टॉल है और '--version' आउटपुट में संस्करण संख्या से बहुत अधिक है।' ifeq "$ (shell svn --version | sed -nE -e '/ संस्करण/एस /^.* ([0-9] + \। [0-9] \ +) \ .. * $$/\ 1/पी ') "" 1.4 "' इसके बजाय –

+0

मेरा sed स्वीकार नहीं करता है -ई: "sed: अवैध विकल्प - ई" – WilliamKF

+1

क्या इसे बनाना है? मैं इन परीक्षणों को कॉन्फ़िगरेशन में लिखता हूं। –

उत्तर

54

manual से:

$(error Bad svn version v1.4, please install v1.6) 

यह एक गंभीर त्रुटि के लिए make परिणाम होगा:

$ make 
Makefile:2: *** Bad svn version v1.4, please install v1.6. Stop. 
+2

एक तरफ ध्यान दें के रूप में, मैं उत्पादन करने के लिए एक बहु त्रुटि संदेश चाहता था। उसके लिए , आप 'err_mesg परिभाषित कर सकते हैं = अपने बहु त्रुटि mesage ... endef', और फिर,' $ (त्रुटि $ (err_mesg)) 'रखने के लिए और उत्पादन होगा' बनाओ err_mesg' के रूप में यह लिखा गया था – Alberto

+0

माइनर ख़तरा:।। अगर बाहर एक नुस्खा के, '$' –

3

सशर्त भी जरूरत है कुछ ध्यान।

 
ifeq ($(shell svnversion --version | sed s/[^0-9\.]*://), 1.4) 
    $(error Bad svnversion v1.4, please install v1.6) 
endif 
6

जबकि $ (त्रुटि ... काम करता है, कभी कभी अपने आसान एक नियम है कि

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 

में विफल रहता है तो उपयोग करने के लिए आप test_svn_version अपने शीर्ष स्तर लक्ष्य की एक शर्त बनाते हैं।

+0

से पहले सफेद जगह नहीं हो सकती है यह काम नहीं कर रहा है, मुझे मिल रहा है: /bin/sh: -c: line 0: अनपेक्षित ईओएफ मिलान करने के लिए देख रहे हैं ' /bin/sh : -सी: लाइन 1: वाक्यविन्यास त्रुटि: एफ का अप्रत्याशित अंत le – WilliamKF

+1

@WilliamKF - उस रेखा के अंत में एक \ N के बाद एक नकली जगह है जो उस समस्या का कारण बनती है। मैंने लापता भी तय किया –