2010-03-10 24 views
7

बनाने के आदेशों का आह्वान किया गया है क्या आदेशों को लॉग करने का कोई तरीका है, प्रोग्राम को संकलित करने के लिए आमंत्रण करें? मुझे पैरामीटर -n और -p के बारे में पता है, लेकिन वे या तो शर्तों को हल नहीं करते हैं, लेकिन बस उन्हें प्रिंट करें। या वे मेकफ़ाइल में 'मेक' करने के लिए कॉल करते समय काम नहीं करते हैं।लॉग

उत्तर

1

SparkBuild द्वारा उत्पादित एनोटेटेड बिल्ड लॉग में आप जो खोज रहे हैं उसे मिल सकता है। इसमें कमांड लाइन को प्रिंट करने से रोकने के लिए "@" का निर्माण किया गया था या नहीं, निर्माण में निष्पादित हर नियम के आदेश शामिल हैं।

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

+0

वे शैल संरचनाएं प्रतीत होते हैं।लेकिन मुझे नहीं पता, मेकफ़ाइल में शैल संरचनाओं का उपयोग क्यों करना चाहते हैं, जब आप मेकफ़ाइल संरचनाओं का उपयोग कर सकते हैं। क्या वे किसी तरह से बेहतर हैं? – Customizer

+0

मैं स्पार्कबिल्ड दिलचस्प लग रहा है। मैं निश्चित रूप से इस पर ध्यान रखूंगा। – Customizer

+1

बनाम संरचना बनाम बनाम संरचनाओं का सवाल उस पर निर्भर करता है जो आप करने की कोशिश कर रहे हैं। एक बात के लिए, ऐसी चीजें हैं जो आप शैल संरचनाओं के साथ कर सकते हैं जिन्हें आप बनाने के साथ नहीं कर सकते हैं, जैसे परीक्षण करना कि फ़ाइल पठनीय या निष्पादन योग्य है। दूसरे के लिए, नियमों के शरीर में अन्य आदेशों के संबंध में उनका अलग-अलग मूल्यांकन किया जाता है: किसी भी आदेश को वास्तव में निष्पादित करने से पहले संरचनाओं का मूल्यांकन किया जाता है, लेकिन शेल संरचनाओं का मूल्यांकन सीटू में किया जाएगा क्योंकि आदेश निष्पादित किए जाते हैं। –

0

क्या आपने -d पैरामीटर (डीबग) के साथ प्रयास किया है?

ध्यान दें कि आप इसके बजाय --debug के साथ infos की मात्रा को नियंत्रित कर सकते हैं। उदाहरण के लिए, --debug = एक (-d के रूप में ही), या --debug = केवल बुनियादी infos दिखाने के लिए ख ...

+0

किसी फ़ाइल में stdout को पुनर्निर्देशित करने के लिए नहीं भूलना, -d बहुत सारी जानकारी बहुत तेज़ी से उत्पन्न करता है। –

1

आप के साथ strace

strace -f -e execve make ... 
+0

यह एक अच्छा उपकरण है। अभी तक इसके बारे में नहीं सुना था। लेकिन यह बहुत सारे उत्पादन का उत्पादन करता है, मुझे इस मामले में आवश्यकता नहीं है। – Customizer

+0

स्ट्रेस सभी सिस्टम कॉलों का पता लगाने के लिए एक उपकरण है (मेरे उदाहरण में केवल execv तक ही सीमित है), इसलिए हां यह संभवतः आपको न्यूनतम से अधिक प्रदान करेगा जो आप खोज रहे हैं (विशेष रूप से यह सभी आदेश (असफल) से एक आदेश निष्पादित करने के प्रयासों को प्रिंट करेगा सभी $ पाथ निर्देशिका)। – hlovdal

2

मेक execve कॉल लॉग इन करने की कोशिश कर सकते लिखते हैं हर कमांड यह कंसोल के लिए निष्पादित करता है, तो

make 2>&1 | tee build.log 

जो स्क्रीन को लिखे एक ही सामान शामिल एक पक्ष प्रभाव के रूप में नामित किया गया build.log एक लॉग फ़ाइल का निर्माण करेगा। (man tee अधिक जानकारी के लिए।)

2>&1 मानक आउटपुट और त्रुटियों को एक स्ट्रीम में जोड़ती है। यदि आपने इसे शामिल नहीं किया है, तो नियमित आउटपुट लॉग फ़ाइल में जाएगा लेकिन त्रुटियां केवल कंसोल पर जाएंगी। (make केवल stderr करने के लिए लिखता है जब एक कमांड एक त्रुटि कोड देता है।)

आप पूरी तरह से एक फाइल करने के लिए प्रवेश के पक्ष में उत्पादन को दबाने के लिए चाहते हैं, तो यह और भी आसान है:

make 2>&1 > build.log 

क्योंकि ये सिर्फ सांत्वना पर कब्जा उत्पादन वे रिकर्सिव make के साथ ठीक काम करते हैं।

+0

दुर्भाग्य से @ (चुप निष्पादन) के साथ उपसर्ग किए गए कमांड इस लॉग में शामिल नहीं हैं। –

7

यह

make SHELL="sh -x" 

खोल यह क्या कर रहा है के बारे में जानकारी मुद्रित करने के लिए है, जिससे आप देखते हैं कि कैसे खोल आदेशों में किसी भी सशर्त मूल्यांकन किया जा रहा है (जो खोल निर्माणों का मूल्यांकन करने का आह्वान कर रहे हैं) के कारण होगा।

+0

यह एक उपयोगी उत्तर है – tonylo