2012-03-11 27 views
6

मेरे सी ++ प्रोजेक्ट के लिए मेरे मेकफ़ाइल का हिस्सा हाल ही में निर्मित कोड द्वारा आउटपुट की गई दो फ़ाइलों की तुलना करने के लिए diff कमांड का उपयोग करता है। मुद्दा यह है कि यदि फ़ाइलें अलग हैं, तो आप जिस स्क्रिप्ट को विफल नहीं करते हैं और जारी रखना चाहिए। ऐसी कई फाइलें हैं जिन्हें तुलना करने की आवश्यकता है और बिल्ड स्क्रिप्ट समाप्त होने से पहले मुझे उन्हें सभी को देखना होगा। उदाहरण के लिए, इस तरह कुछ,विभिन्न फ़ाइलों पर भिन्नता का उपयोग करते समय मेकफ़ाइल विफल रहा

diff: * 
     diff $(TEST)/T4.board $(TEST)/T4.board 
     diff $(TEST)/T4.board $(TEST)/sample.board 

पहली पंक्ति कोई समस्या नहीं होती क्योंकि फाइलें समान हैं। दूसरी पंक्ति अलग-अलग फाइलों की तुलना करती है, और एक बार अंतर प्रदर्शित होने पर, मुझे

Makefile:102: recipe for target `diff' failed 
make: *** [diff] Error 1 

और स्क्रिप्ट बंद हो जाती है। मैं इसे जारी रखने के लिए कैसे प्राप्त कर सकता हूं?

+0

'diff' और सफलता पर 0 1 लौटना चाहिए विफलता पर। सवाल यह है कि मैं विफलता से कैसे निपटूं? मैं केवल एक हफ्ते के लिए मेकफ़ाइल का उपयोग कर रहा हूं। – gsingh2011

उत्तर

5

अपने पूरे नुस्खा कोई त्रुटि वापस जाने के लिए करें:

diff: * 
    diff $(TEST)/T4.board $(TEST)/T4.board  || exit 0 
    diff $(TEST)/T4.board $(TEST)/sample.board || exit 0 

एक exit 0 के बजाय echo 'Files differ' उपयोग कर सकते हैं।

+0

धन्यवाद, दोनों विकल्प काम करते हैं। मुझे लगता है कि यह मूर्खतापूर्ण है हालांकि मेकफ़ाइल में त्रुटियों को अनदेखा करने का विकल्प नहीं है। 'Diff' जैसी चीजों के लिए, 1 लौटने से दुनिया का अंत नहीं होता है, और प्रत्येक diff के अंत में निकास 0 जोड़ना परेशान हो सकता है। – gsingh2011

+1

@ gsingh2011: मेकफ़ाइल में त्रुटियों को अनदेखा करने का विकल्प होता है। मेरा जवाब देखें – thiton

+0

@ gsingh2011 ओह, मैं इसके बारे में भूल गया, आप अपने निकास कोड को अनदेखा करने के लिए आदेश से पहले एक ऋण चिह्न ('-') जोड़ सकते हैं। थिटन का जवाब देखें। –

7

के रूप में जीएनयू section 5.5 "Errors" में मैनुअल राज्यों बनाने के लिए, आप - साथ आदेश लगाकर द्वारा एक आदेश की वापसी स्थिति को नजरअंदाज कर सकते हैं:

diff: * 
    -diff $(TEST)/T4.board $(TEST)/T4.board 
    -diff $(TEST)/T4.board $(TEST)/sample.board 
+0

+1, मैं जीएनयू मेक में त्रुटियों को दबाने के लिए इस तरह के मूल तरीके के बारे में भूल गया। –