2011-04-28 5 views
13

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

+12

पहला कदम कार्यक्रम है कि सफलता पर रिटर्न गैर शून्य के मेंटेनर को एक बग रिपोर्ट प्रस्तुत करने के लिए है। –

+2

अच्छा, कार्यक्रम एक वाणिज्यिक विक्रेता से है, इसलिए मुझे संदेह है कि वे कार्यक्रम के व्यवहार को बदल देंगे। – trondd

+0

@trondd जीएनयू मेक जीएनयू परियोजना द्वारा विकसित किया गया है, जो वाणिज्यिक नहीं है। यह विपरीत है: यह मुफ्त सॉफ्टवेयर है। – no92

उत्तर

15

आप दिए गए मान ही Makefile लाइन पर एक दूसरे आदेश पर, खोल $? चर है कि पिछले लौटे मान का उपयोग कर परीक्षण कर सकते हैं।

false कमांड के साथ उदाहरण है कि स्पष्ट रूप से संकलन बंद कर देंगे के लिए:

test: 
    /bin/false ; /usr/bin/test "$$?" -eq 1  # <-- make does not stop here 
    /bin/echo "Continues ..." 
    /bin/false         # <-- make stops here 
1

कैसे उपकरण विफल पर बर्ताव करता है पर निर्भर करता है, तो आप सिर्फ आउटपुट फ़ाइल के होने की जाँच कर सकते हैं। कुछ की तरह:

@if test ! -f $(FILE); then exit 2; fi 
8

उपयोग

command || [ $$? -eq v ] 
अपने आदेश के रूप में

, आदेश प्रतिस्थापन आदेश के साथ, और साथ वी सफलता पर मूल्य वापस आ गया।

(यह सिर्फ डिडिएर Trosset के जवाब का एक और अधिक कॉम्पैक्ट संस्करण है।)

+3

यह काम नहीं करेगा, एक makefile में के रूप में है, क्योंकि '$?' चर परिभाषाएँ बनाने के अनुसार व्याख्या की जाएगी। आपको इसके बजाय '$$?' का उपयोग करने की आवश्यकता है। –

+0

फिक्स्ड; सुधारों के लिए धन्यवाद। – reinierpost

+1

डिडिएर Trosset जवाब देने के लिए की तुलना करना, यह एक भी पारित करेंगे जब स्थिति 0 से आदेश रिटर्न (मेरे मामले में है कि नहीं है मैं चाहता था)! –

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