2011-01-17 15 views
41

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

9: ifeq ($(${JSONLIBPATH}),) 
10: JSONLIBPATH = ${ALTJSONLIBDIR}/${LIBJSON} 
11: endif 
12: ifeq ($(${JSONLIBPATH}),) 
13: $(error JSON library is not found. Please install libjson before building) 
14: endif 

मेरे makefile लाइन 13 पर अटक जाती है:

Makefile:13: *** commands commence before first target. Stop. 

लाइन 13 के बाद, मेरे makefile अपने लक्ष्य है।

मैंने इस सशर्त ब्लॉक को एक लक्ष्य में डालने की कोशिश की (उदाहरण के लिए isJSONLibraryInstalled नामक एक लक्ष्य) लेकिन यह सही ढंग से निष्पादित नहीं होता है।

लक्ष्य को संसाधित करने से पहले, मैं फ़ाइल के अस्तित्व की जांच कैसे करूं और त्रुटि केस को कैसे संभालेगा? क्षमा करें अगर यह एक बेवकूफ सवाल है।

उत्तर

62

सबसे पहले, आप एक चर की सामग्री को देख रहे हैं जिसका नाम वर्तमान पथ के नाम पर रखा गया है, जो शायद आप नहीं चाहते हैं। एक साधारण वातावरण परिवर्तनीय संदर्भ $ (नाम) या $ {name} है, $ ($ {name} नहीं)। इसके कारण, लाइन 13 का हमेशा मूल्यांकन किया जाता है।

दूसरा, मुझे लगता है कि यह $ (त्रुटि ...) अभिव्यक्ति के इंडेंटेशन पर चिल्ला रहा है। जबकि अभिव्यक्ति एक खाली स्ट्रिंग पर हल हो जाती है, फिर भी रेखा की शुरुआत में एक टैब वर्ण होता है, जो एक कमांड इंगित करता है, जो बदले में नियम के बाहर मौजूद नहीं हो सकता है।

मुझे लगता है कि इंडेंट के लिए टैब के बजाए रिक्त स्थान का उपयोग करना काम करेगा।

+9

रिशेर: मैं लंबे समय से इस पर अटक गया था जहां मैंने रिक्त स्थान के बजाय टैब का उपयोग किया था और '*** आदेश पहले शुरू हो गए थे पहला लक्ष्य 'त्रुटि। आपने दिन बचाया बहुत धन्यवाद ... :) – NeonGlow

+0

मेरा समय बचाने के लिए धन्यवाद ... –

+2

ग्रेट अवलोकन .. वर्जित स्थान में टैब :) –

1

मेरे लिए यह कनेक्टर से पहले एक अनावश्यक सफेद स्थान था जो इसका कारण बन रहा था। slickEdit पर मैंने सभी विशेष चरित्र देखने के लिए विकल्प चुना और काले भेड़ को देखा।

+0

बंद करें, यह '$ (त्रुटि ...' प्रतिस्थापन से पहले अनावश्यक टैब वर्ण है जो त्रुटि उत्पन्न कर रहा है इसे हटाने या रिक्त स्थान के साथ बदलने से त्रुटि दूर हो जाएगी। –

3

जब आप त्रुटि संदेश बनाओ मिलता है, हमेशा त्रुटि संदेश प्रलेखन http://www.gnu.org/software/make/manual/make.html#Error-Messages जाँच जीएनयू पर 3.81 बनाओ (त्रुटि नए संस्करण से हटा दिया गया है प्रकट होता है), यह कहते हैं:

इस में पहली बात का मतलब मेकफ़ाइल कमांड स्क्रिप्ट का हिस्सा प्रतीत होता है: यह एक टैब चरित्र से शुरू होता है और यह एक कानूनी मेक कमांड (जैसे परिवर्तनीय असाइनमेंट) प्रतीत नहीं होता है। कमांड स्क्रिप्ट हमेशा एक लक्ष्य से जुड़ा होना चाहिए।

क्या मायने रखता है और अधिक भ्रमित करने वाला यह है कि "कानूनी बनाने का आदेश नहीं लगता है" भाग। यही कारण है कि बताता है कि क्यों में:

a := b 
    $(error a) 

त्रुटि पंक्ति 2 में क्या होता है और नहीं 1:

a := b 
a: 
    echo $a 

नोट:: अतः वर्तमान में बस बयान यह काम की तरह पार्स कर सकते हैं कि, तो निम्न कार्य की अनुमति है कोड को रिक्त स्थान में स्थानांतरित करता है, इसलिए आप उपर्युक्त कोड को अपने संपादक में कॉपी नहीं कर सकते: https://meta.stackexchange.com/questions/143632/tabs-converted-to-spaces

संबंधित मुद्दे