2012-06-07 13 views
14

हमारे पास हमारे निर्माण प्रणाली में एक लंबा और जटिल मेकफ़ाइल है। क्या किसी दिए गए मेक इनवोकेशन के लिए कौन से लक्ष्य निष्पादित किए जाते हैं, इसका पता लगाने का कोई अच्छा तरीका है?समस्या निवारण के लिए मेकफ़ाइल लक्ष्य का पता कैसे लगाएं?

उत्तर

19

उपयोग make -d या make --debug[=flags]options: सामान्य प्रक्रिया के अलावा

‘-d’

प्रिंट डिबगिंग जानकारी। डीबगिंग जानकारी कहती है कि रीमेकिंग के लिए कौन सी फाइलों पर विचार किया जा रहा है, किस फाइल-टाइम की तुलना की जा रही है और किस नतीजे के साथ, वास्तव में कौन सी फाइलों को रीमेड करने की आवश्यकता है, जो निहित नियमों पर विचार किया जाता है और जो लागू होते हैं-निर्णय लेने के बारे में सब कुछ दिलचस्प है क्या करें। -d विकल्प ‘--debug=a’ के समतुल्य है (नीचे देखें)। सामान्य प्रक्रिया के अलावा

‘--debug[=options]’

प्रिंट डिबगिंग जानकारी। आउटपुट के विभिन्न स्तर और प्रकार चुने जा सकते हैं। कोई तर्क नहीं के साथ, डिबगिंग के "मूल" स्तर को मुद्रित करें। संभावित तर्क नीचे हैं; केवल पहला अक्षर माना जाता है, और मान अल्पविराम या अंतरिक्ष से अलग होना चाहिए।

a (सभी) सभी प्रकार के डिबगिंग आउटपुट सक्षम हैं। यह '-d' का उपयोग करने के बराबर है।

b (मूल) मूल डिबगिंग प्रत्येक लक्ष्य को मुद्रित करता है जो कि पुराना पाया गया था, और क्या निर्माण सफल था या नहीं।

v (वर्बोज़) ‘basic’ से ऊपर एक स्तर; इसमें मेकफ़ाइल को पार्स किए गए संदेशों के बारे में संदेश शामिल हैं, पूर्वापेक्षाएँ जिन्हें पुनर्निर्मित करने की आवश्यकता नहीं थी, आदि। यह विकल्प ‘basic’ संदेशों को भी सक्षम बनाता है।

i (निहित) प्रत्येक लक्ष्य के लिए निहित नियम खोजों का वर्णन करने वाले संदेश प्रिंट करता है। यह विकल्प ‘basic’ संदेशों को भी सक्षम बनाता है।

j (नौकरियां) विशिष्ट उप-सामग्रियों के आमंत्रण पर विवरण देने वाले संदेश प्रिंट करता है।

m (मेकफ़ाइल) डिफ़ॉल्ट रूप से, मेकफ़ाइल रीमेक करने का प्रयास करते समय उपरोक्त संदेश सक्षम नहीं होते हैं। यह विकल्प मेकफ़ाइल पुनर्निर्माण करते समय संदेशों को सक्षम बनाता है। ध्यान दें कि ‘all’ विकल्प इस विकल्प को सक्षम करता है। यह विकल्प ‘basic’ संदेशों को भी सक्षम बनाता है।

एक अन्य विकल्प remake उपयोग करने के लिए है - जीएनयू का एक समझौता संस्करण है कि कहते हैं त्रुटि रिपोर्टिंग में सुधार, निष्पादन का पता लगाने की क्षमता है, और एक डिबगर करें।

2

ElectricMake एक XML- चिह्नित जानकारी के बहुत सारे है कि इस स्थिति में मदद मिलेगी के साथ अपने निर्माण लॉग के संस्करण उत्पन्न कर सकते हैं: यहां तक ​​कि उन का निर्माण के दौरान लागू सभी आदेशों के लिए

  • पूर्ण कमांड लाइनों (जिन्हें @ संशोधक के साथ "मूक" आदेश के रूप में चिह्नित किया गया था)।
  • आदेशों की उत्पत्ति (मेकफ़ाइल और लाइन नंबर) का आह्वान किया गया।
  • आदेशों का रनटाइम।
  • निर्माण में लक्ष्यों के बीच निर्भरता संबंध।
  • लक्ष्य और रिकर्सिव के बीच संरचनात्मक संबंध निर्माण में बनाता है।
  • बिल्ड में निर्मित आदेशों द्वारा फ़ाइलें पढ़ी/लिखी गईं।

यहाँ कि उत्पादन का एक नमूना है:

<job id="J0824ab08" thread="5e72bb0" node="linbuild1-2" type="rule" name="../../i686_Linux/testmain/testmain.d" file="../config/rules.mak" line="109"> 
<command line="110"> 
<argv>echo Rebuilding '../../i686_Linux/testmain/testmain.d'</argv> 
<output src="prog">Rebuilding ../../i686_Linux/testmain/testmain.d 
</output> 
</command> 
<command line="111-114"> 
<argv>set -e; g++ -MM -w -DUSE_PROFILING -DUSE_LOGGING -DHAVE_UNIX -DHAVE_LINUX -I.. testmain.cpp \ 
     | sed 's!\(testmain\)\.o[ :]*!../../i686_Linux/testmain/\1.o '../../i686_Linux/testmain/testmain.d' : !g' \ 
     &gt; '../../i686_Linux/testmain/testmain.d'; \ 
     [ -s '../../i686_Linux/testmain/testmain.d' ] || touch '../../i686_Linux/testmain/testmain.d'</argv> 
</command> 
<opList> 
<op type="read" file="/home/ericm/src/testmain/testmain.cpp"/> 
<op type="read" file="/home/ericm/src/minidumper/ExceptionReport.h"/> 
<op type="read" file="/home/ericm/src/util/ECAssert.h"/> 
<op type="create" file="/home/ericm/i686_Linux/ecloud/testmain/testmain.d" found="0"/> 
</opList> 
<timing invoked="1.919926" completed="3.600491" node="linbuild1-2"/> 
<waitingJobs idList="J0824ae38"/> 
</job> 

How to Quickly Navigate an Unfamiliar Makefile एनोटेट निर्माण लॉग का उपयोग कर एक makefile आगे बढ़ने का तरीका इस बात का एक उदाहरण दिखाता है।

Data Mining ElectricAccelerator Annotation दिखाता है कि बिल्ड के लिए बिल-ऑफ-सामग्री उत्पन्न करने के लिए आप एनोटेटेड बिल्ड लॉग का उपयोग कैसे कर सकते हैं।

इलेक्ट्रिकमेक जीएनयू संगत बनाओ, इसलिए यह जीएनयू बनाने के साथ काम करने वाली मेकफ़ाइल को संसाधित कर सकता है।

अस्वीकरण: मैं इलेक्ट्रिक एक्सेलेरेटर का आर्किटेक्ट और लीड डेवलपर हूं।

+0

अरे एरिक! मैं एक इलेक्ट्रिक मेक उपयोगकर्ता हूं। आपको पोस्ट करने के लिए कूल करें। एमेक में बनाए गए डिबगिंग लॉग और विकल्प की मात्रा बहुत चौंकाने वाली है। महान उत्पाद, सिफारिश करेंगे। – ThePosey