# निर्भरता को रोकने के लिए उपकरण [बंद]


175

कोई अच्छा सुझाव? इनपुट एक हेडर फ़ाइल का नाम होगा और आउटपुट में प्रत्यक्ष या अप्रत्यक्ष रूप से सभी फाइलों की एक सूची (अधिमानतः एक पेड़) होनी चाहिए।


4
यह एक "पसंदीदा" के बारे में नहीं है इसमें शामिल हैं gcc में अच्छी तरह से दिखाया गया है, लेकिन msvs नहीं करता है। इसलिए हम (आई) किसी भी टूल की तलाश में हैं।
फंतासी

70
मैं "ऑफ-टॉपिक" सवालों को इतना उपयोगी क्यों बना रहा हूं?
jfritz42

5
@ jfritz42: इसे "वर्ष की टिप्पणी" पुरस्कार दिया जाना चाहिए! जब कोई विषय और इतने सारे उपयोगकर्ता हैं, तो कोई भी प्रश्नकर्ता "टॉपिक" को कैसे लेबल कर सकता है?
११:१२ पर टोटोरो

2
मैं यह नोट करना चाहता था कि cpp- निर्भरता , iwyu , और dep- मैट्रिक्स#include जैसी निर्भरता से निपटने के लिए बहुत अधिक उपकरण हैं जो कि अजगर में लिखा एक सुंदर अनुभवहीन उपकरण है।
nonsensickle

3
@ jfritz42 संख्या स्पष्ट है: 123 वोट और 62 पसंदीदा। कई लोग इसे इस तरह से देखते हैं। अजीब एसओ मानक। मुझे यह भी संदेह है कि इस तरह के सवालों का सुपरयूजर पर समान जवाब होगा।
एंड्रियास

जवाबों:


148

यदि आपके पास GCC / G ++ तक पहुंच है, तो -Mविकल्प निर्भरता सूची को आउटपुट करेगा। यह किसी भी अतिरिक्त सामान को नहीं करता है जो अन्य उपकरण करते हैं, लेकिन चूंकि यह संकलक से आ रहा है, इसलिए कोई मौका नहीं है कि यह "गलत" जगह से फाइलें उठाएगा।


60
-Hएक पेड़ भी देता है!
3

28
-MMस्किप सिस्टम हेडर
TheJosh

3
यह भी -oविकल्प संकलक के साथ करने के लिए आउटपुट लिखने के बजाय stdout दर्ज करें।
हाय-एंजेल

2
@SBB यह केवल तभी काम करता है जब कोई त्रुटि नहीं है, और stderrइसके बजाय प्रिंट करता है stdout। अन्यथा, यह विकल्प अधिक सामान्य है।
user877329

92

धन्यवाद केथबी को। मैंने cl.exe (VS2008) के लिए डॉक्स देखे और / showIncludes ध्वज पाया। आईडीई से, यह किसी भी सीपीपी फ़ाइल के संपत्ति पृष्ठ से सेट किया जा सकता है।

स्क्रीन शॉट


1
यह कुछ बहुत ही कठिन संकलन त्रुटियों / चेतावनियों को हल करने में अत्यंत उपयोगी है। आपका बहुत बहुत धन्यवाद!
अश्विन नंजप्पा

यह भी बहुत आसान है जब precompiled हेडर को अनुकूलित करने की कोशिश कर रहा है!
fmuecke

वीएस में काम करते समय, मुझे लगता है कि यह मेरी समस्या को हल करने का सबसे तेज उपाय है ~ :-)
योबिन

यह काम करने के लिए प्रतीत नहीं होता है, अगर कुछ हेडर में एक std c हेडर शामिल होता है जैसेmath.h
abergmeier

29

एक भारी वजन समाधान के लिए, आपको डॉक्सीजन की जांच करनी चाहिए । यह आपके कोड आधार के माध्यम से स्कैन करता है और प्रभावी रूप से एक वेबसाइट के साथ आता है, जो आपके कोड को दस्तावेज करता है। कई चीजों में से एक यह दिखाता है कि पेड़ शामिल हैं।

यदि आप इस उपकरण के आउटपुट को किसी अन्य प्रक्रिया में प्लग करने में सक्षम होना चाह रहे हैं, तो यह आपके लिए काम नहीं कर सकता है (हालाँकि doxygen अन्य प्रारूपों के लिए आउटपुट करता है, मैं उस सुविधा से परिचित नहीं हूं)। यदि आप बस निर्भरता को कम करना चाहते हैं, हालांकि, यह बहुत अच्छा काम करना चाहिए।


20

मैंने cinclude2dot नामक टूल के साथ खेला है । जब मैं यहाँ काम करने के लिए आया था तो एक बड़े कोडबेस पर एक हैंडल पाने में यह बहुत उपयोगी था। मैंने वास्तव में इसे हमारे दैनिक निर्माण में अंतत: एकीकृत करने के बारे में सोचा है।


2
यह उपकरण असाधारण रूप से अच्छी तरह से काम करता है। मुझे g ++ की -M और doxygen से परेशानी थी।
स्लीपरो

मैंने cinclude2dot के आउटपुट को पढ़ने और एक नक्शे में सभी निर्भरता प्राप्त करने के लिए एक अजगर स्क्रिप्ट लिखी और फिर अंत में स्रोतों के जंगल का उत्पादन करने के लिए गहराई-पहला-ट्रावर्सल किया। जिस जंगल में कोई .cc/.c/.cxxफ़ाइल नहीं है (केवल .hउसमें मौजूद फ़ाइलें) निरर्थक हो सकती हैं।
शुवा

12

सबसे पहले, cinclude2dot.pl एक पर्ल स्क्रिप्ट है जो C / C ++ कोड का विश्लेषण करती है और ग्राफविज़ में इनपुट के लिए एक डॉट फ़ाइल के रूप में एक #include निर्भरता ग्राफ का उत्पादन करती है।

http://www.flourish.org/cinclude2dot/

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

http://www.profactor.co.uk/includemanager.php

एक नि: शुल्क परीक्षण है, और यह बहुत बढ़िया है। यह विज़ुअल स्टूडियो के लिए एक प्लग-इन है जो पूरी तरह से एकीकृत है इसलिए यहाँ पर किसी चीज़ पर डबल क्लिक करना आपको उस स्थान पर ले जाता है जहाँ इसे वहाँ शामिल किया गया है।

टूलटिप माउसओवर आपको वह सभी जानकारी देता है जो आप चाहते हैं, और यह आपको नीचे / ऊपर ड्रिल करने देता है, पूरे उपप्रकार हटा देता है जिसके बारे में आपको परवाह नहीं है, ग्राफ़ के अलावा अन्य अभ्यावेदन देखें, इसके लिए मैचों की एक सूची के माध्यम से साइकिल करें और यह, यह अद्भुत है।

यदि आप इसके बारे में जल्दी कर रहे हैं, तो आप परीक्षण शुरू होने से पहले एक बड़ी परियोजनाओं की #include संरचना को फिर से तैयार कर सकते हैं। फिर भी, यह बहुत अधिक खर्च नहीं करता है, लगभग $ 35 प्रति लाइसेंस।

यह क्या करता है के लिए, यह एकदम सही है। न केवल # अलग-अलग रेखांकन बल्कि साझा फ़ाइलों की परियोजना निर्भरता, बिल्ड समय पर प्रभाव, ग्रिड में विस्तृत गुण, परिपूर्ण।


मैंने अपने सी प्रोजेक्ट में इनकमिंगमैन का सफलतापूर्वक उपयोग किया है। मैं विजुअल स्टूडियो 2013 का उपयोग कर रहा हूं।
smwikipedia

किंडा संदिग्ध।
SDD

12

खुशखबरी: redhat Source-Navigator (विंडोज पर भी चलता है)। बेशक, कंपाइलर स्विच (पहले उल्लिखित) में बेहतर पार्सिंग है और मुझे यकीन नहीं है कि यह एमएफसी, क्यूटी और उनके जादुई कीवर्ड को कैसे संभालेंगे।

redhat स्रोत-नेविगेटर


5

कीथबी के उत्तर पर निर्माण , यहाँ GNUmake सिंटैक्स को स्वचालित रूप से 1) निर्भरता फ़ाइलों को उत्पन्न करता है, 2) उन्हें अद्यतित रखें, और 3) अपने मेकफाइल में उनका उपयोग करें:

.dep:
    mkdir $@
.dep/%.dep: %.c .dep
    (echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
    (echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)

(उन इंडेंट को हार्डटैब में बदलना सुनिश्चित करें।)



3

C ++ के लिए समझें आपको मदद करने में सक्षम होना चाहिए: यह एक डेटाबेस बनाता है जिसे आप पर्ल से एक्सेस कर सकते हैं।


समझ वाणिज्यिक है, लेकिन यह अविश्वसनीय आईएमओ है। आप इसे मुफ्त में आज़मा सकते हैं।
स्कैलियम

1

cscope ( http://cscope.sourceforge.net/ ) एक स्वसंपूर्ण xterm में ऐसा करता है, और इसे आपके पसंदीदा संपादक के अंदर भी उपयोग किया जा सकता है - इसमें महान emacs और vi / vim समर्थन है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.