2015-11-10 4 views
6

मैं कोड विकास और Makefile प्रोजेक्ट के डीबग के लिए एआरएम डीएस -5 v5.20.0 पैकेज से एक्लिप्स सीडीटी v4.3.2 का उपयोग कर रहा हूं।एक्लिप्स सीडीटी इंडेक्स एक हेडर फ़ाइल क्यों है जो पथ में नहीं है?

मेकफ़ाइल वास्तव में मकेफाइल का पदानुक्रम है जो कमांड लाइन विकल्पों के आधार पर एकाधिक कॉन्फ़िगरेशन में एकाधिक लक्ष्य बनाता है।

प्रभावी स्थिर विश्लेषण की अनुमति देने के लिए, मैं प्रोजेक्ट की सेटिंग Paths and Symbols का उपयोग करता हूं ताकि इंडेक्सर को विभिन्न फाइलों को ढूंढने में मदद मिल सके और सही सशर्त रूप से संकलित कोड सेगमेंट को हाइलाइट किया जा सके।

हमारे प्रोजेक्ट में एक हेडर फ़ाइल है जो कोड पेड़ के कई मॉड्यूल में शामिल है। हालांकि, हेडर फाइल के दो वेरिएंट दो निर्माण विन्यास के साथ दो आसन्न निर्देशिका में मौजूद, सशर्त उपयोग के लिए कर रहे हैं:

My_Project 
    | 
    +-- Include_1 
    | | 
    | +-- header.h 
    | 
    +-- Include_2 
    | | 
    | +-- header.h 
    | 
    +-- Source 
    | | 
    | +-- module_1.c 
    | 
    +-- makefile 

दो वेरिएंट ज्यादातर समान हैं, लेकिन कुछ मतभेद होते हैं। इन शीर्षकों में कुछ मैक्रो परिभाषाएं और enumtypedef मिटा दी गई हैं। विशेष रूप से, निम्न नमूना भागों दोनों वेरिएंट में समान हैं:

// header.h 
#define SYMBOL 0x1 
typedef enum { 
    constant = 0x2 
} enum_t 

एक ठेठ कोड मॉड्यूल इन हेडर में से एक, makefile में कॉन्फ़िगरेशन के आधार पर शामिल है, और SYMBOL और constant के संदर्भ हैं।

paths and Symbols टैब में, मैंने पथ सूची में केवल My_Project/Include_1 जोड़ा, इसलिए सूचकांक को भ्रमित नहीं होना चाहिए। मैंने Window - Preferences ->C/C++ ->Indexer मेनू में वास्तव में Allow heuristic resolution of includes विकल्प अक्षम कर दिया है - वास्तव में, मैंने सभी इंडेक्सर विकल्पों को अक्षम कर दिया है)।

है, उन सभी के साथ

, जब मैं संपादक में module.c फ़ाइल को खोलने, constant के लिए संदर्भ लहरदार लाल रेखांकन के साथ चिह्नित कर रहे हैं, और एक Symbol 'constant' could not be resolved त्रुटि दर्शाई गई हैं। उसी समय, SYMBOL के सन्दर्भ में कोई त्रुटि संकेत नहीं है।

जब मैं हेडर फ़ाइलों में से किसी एक को header_x.h पर पुनर्नामित करता हूं तो त्रुटि संकेत गायब हो जाता है।

1. मुझे इन इंडेक्सर त्रुटि संकेत क्यों प्राप्त होते हैं?

2. मैं उन्हें कैसे समाप्त कर सकता हूं?

3. केवल enums और # परिभाषित क्यों नहीं?

+0

मुझे इस प्रश्न का उत्तर नहीं पता है, लेकिन यदि आपको SO पर कोई अच्छा उत्तर नहीं मिलता है, तो आप सीडीटी समुदाय मंच पर पोस्ट पार करने का प्रयास कर सकते हैं: https://www.eclipse.org/ फ़ोरम/index.php/f/80/वैकल्पिक रूप से यदि आप DS5 का उपयोग कर रहे हैं तो एक वाणिज्यिक उत्पाद है, मैं सीधे एआरएम से सहायता का अनुरोध करता हूं क्योंकि लाइसेंस शुल्क में सहायता शामिल है। –

+0

@ जोनाह ग्राहम - धन्यवाद। ग्रहण मंचों के साथ मेरा अनुभव इतना अच्छा नहीं है। अक्सर, गैर-मुख्यधारा के प्रश्न पूछने के लिए SO (और सामान्य रूप से एसई) सबसे अच्छी जगह है। मैंने एआरएम को अतीत में दो बार मदद की थी (और वास्तव में, उनकी वर्तमान रिलीज में कम से कम दो बग फिक्स शामिल हैं!)। मैंने सोचा कि यह समस्या एआरएम विशिष्ट नहीं है कि अन्य सीडीटी उपयोगकर्ताओं का सामना करना पड़ सकता है। वैसे भी, यह शायद मेरा अगला पड़ाव होगा। – ysap

+0

मैं सभी बिंदुओं पर आपसे सहमत हूं, अगर आपको यहां बहुत अधिक प्रतिक्रिया नहीं मिलती है तो बस कुछ दूसरी स्टॉप की पेशकश करें। मुझे आशा है कि एआरएम भी सीडीटी कीड़े को ठीक करने के इच्छुक हैं! पीएस, अगर आप गिटहब पर एमसीवीई चिपकते हैं, तो मुझे एक नज़र रखना अच्छा लगेगा (मैं थोड़ी देर के लिए सीडीटी देव कर रहा हूं, बस अपने मुद्दे पर तुरंत जवाब न दें) –

उत्तर

4

ग्रहण सीडीटी इंडेक्सर मेरे अनुभव के लिए प्रोजेक्ट निर्देशिका में इंडेक्स स्रोत फाइलें चाहे आप इसे पसंद करते हैं या नहीं। सिर्फ एक ही रास्ता अपनी स्थिति से बचने के लिए नहीं है: उन्हें परियोजना है, जिसमें दो तरह से मेरी जानकारी के लिए किया जा सकता है से बाहर:

  1. संसाधनों का चयन करें, यह सही है तो गुण क्लिक करके ली गई चिह्नित करने और भीतर संसाधनों व्युत्पन्न की जांच , और फिर सूचकांक
  2. पुनर्निर्माण संसाधन को छोड़कर एक विशेष फ़िल्टर लिखें।

एक और बात यह है कि आप जांच करने की आवश्यकता है कि आप पथ या अन्य वातावरण चर कि इंडेक्सर द्वारा विचार किया जा सकता में शामिल नहीं किया है गलती से हमलावर निर्देशिका है।

सीडीटी के साथ क्या गलत हो रहा है इसके अलावा ऐसा लगता है कि आप ऐसा कुछ कर रहे हैं जो सर्वोत्तम अभ्यास नहीं है। आपको अपने एनम को हेडर गार्ड के साथ एक अलग हेडर फ़ाइल में रखना चाहिए और आवश्यकतानुसार इसे शामिल करना चाहिए।

हालांकि यह एक ऐसी स्थिति है जो हो सकती है और आपके पास अलग-अलग कार्य करने की लक्जरी नहीं हो सकती है।

+2

का सुझाव देने के लिए +1 धन्यवाद। सबसे पहले, शैली के बारे में एक टिप्पणी। मैं चाहता हूं कि लोग स्वीकार करें कि कभी-कभी यह असंभव है या आवश्यक नहीं है कि वे * सर्वोत्तम * अभ्यास के रूप में क्या मानते हैं। बस स्थिति के लिए स्थिति ले लो। विशेष रूप से, प्रश्न में हेडर फाइल बाहरी स्रोतों से दी जाती हैं और हमारे पास उन्हें बदलने में कोई लचीलापन नहीं होता है। फिर, कोड कोड के लिए एक्लिप्स का उपयोग करने के लिए टीम में मैं अकेला हूं, इसलिए * मेरी * समस्या के कारण परियोजना बदल नहीं रही है। यद्यपि इस मामले पर आपकी * राय * मूल्यवान और सराहना की गई है, शायद इसे उत्तर के अंत में रखा जाना चाहिए था। – ysap

+0

दूसरा, नहीं, enums समान हैं। ग्रहण नियमित रूप से हेडर को अनुक्रमित करता है, लेकिन जैसा कि मैंने नोट किया है, मैंने स्पष्ट रूप से उस विकल्प को अनचेक करके नहीं पूछा। तीसरा, हेडरों में से एक को छोड़कर एक ऐसा विचार है जिसने मुझे अपने सिर को थप्पड़ मार दिया और कहा, "मैंने इस हफ्ते पहले क्यों नहीं सोचा था ..."। यद्यपि ग्रहण में अभी भी एक बग, बहिष्करण * मेरी * समस्या हल हो गई है, लेकिन मुझे इसे प्रभावी होने के लिए पहले इंडेक्सर को अक्षम और पुन: सक्षम करना था। आपने मेरा बक्षीस अर्जित किया! – ysap

+0

@ysap, ऐसा लगता है कि आप जो कहते हैं वह अक्सर सच होता है, लेकिन हर कोई इसे स्वीकार नहीं करता है। मैं लंबे समय से बड़ी एसडब्ल्यू परियोजनाओं पर सीडीटी का उपयोग कर रहा हूं, और सूचकांक के साथ हमेशा कुछ समस्या नहीं होने पर समस्या होती है। आपको बस इसे स्वीकार करना होगा और अपनी परियोजना को पॉलिश करने पर बहुत अधिक समय बिताने से बचें। सीडीटी समय के साथ सुधारता है लेकिन यह एक धीमी प्रक्रिया है। हालांकि, अन्य विकल्पों में ग्रहण की विशेषताएं अनुपलब्ध हैं। – g24l

2

मैं दूसरे प्रश्न का उत्तर देने का प्रयास कर सकता हूं।

  1. मैं उन्हें कैसे समाप्त कर सकता हूं?

मैं अपने विकास के लिए eclipse-cdt का उपयोग करें और मैं भी अवलोकन इस तरह भर में आ गए हैं। मैं हमेशा निम्नलिखित में से एक करता हूं और यह अक्सर मेरे लिए काम करता है।

  1. डिफ़ॉल्ट eclipse-cdt अप्रयुक्त हेडर फ़ाइलों को सी ++/सी फ़ाइलों के रूप में सूचीबद्ध करेगा। यह चाहे आप उन्हें paths & symbols के तहत जोड़ते हैं, भले ही यह होगा। आप Project properties -> Indexer -> (un check) Index unused headers as C++/C files के माध्यम से उस व्यवहार को ओवरराइड कर सकते हैं। [हालांकि आपकी टिप्पणी के अनुसार, आप पहले से ही पूरे Indexer को अक्षम करने का प्रयास कर चुके हैं, मुझे लगता है कि यह आपके मामले में काम नहीं कर सकता है। फिर भी, मैं एक लायक कोशिश करता हूं]
  2. कभी-कभी, Indexer जैसे ही आप कोड परिवर्तन/हेडर परिवर्तन करते हैं, उतना ही नहीं चलेंगे। यह मेमोरी बाधा और बड़ी परियोजना के साथ बड़ी परियोजना के कारण होता है, विशेष रूप से बड़ी फाइल वाले स्रोत फाइलें। ऐसे मामले में, आप cleaning the project आज़मा सकते हैं और परिवर्तन को देखने के लिए मजबूती से पुन: अनुक्रमण शुरू कर सकते हैं।
  3. अंतिम विकल्प जो मैं अक्सर कोशिश करता हूं, परियोजना को बंद/हटा देना (परियोजना सामग्री नहीं) और अकेले प्रोजेक्ट को फिर से बनाना है (ताकि .cproject नया बनाया जाएगा)। इसने मेरे लिए ज्यादातर बार काम किया है, हालांकि इसके पीछे के आंतरिक विवरणों को नहीं जानते हैं। ये सभी परीक्षण-त्रुटि आधार पर पूरी तरह से प्रयास किए जाते हैं, पूरी तरह से अंत उपयोगकर्ता परिप्रेक्ष्य पर।
+0

धन्यवाद।सबसे पहले, यह जानना बेहद अच्छा है कि समस्या मेरे मामले के लिए विशेष नहीं है। यह आशा करता है कि इसे ग्रहण परियोजना में ही तय किया जाएगा। अब, आपके बिंदुओं से संबंधित: 1. बस स्पष्ट करने के लिए, मैंने पूरे इंडेक्सर को अक्षम नहीं किया, बस सभी उपलब्ध विकल्प। 2. पाठ्यक्रम पीएफ विकास के दौरान, मुझे हर दूसरे निर्माण करने से पहले परियोजना को साफ करना होगा, क्योंकि यह पुस्तकालयों के पुनर्निर्माण को मजबूर करने के लिए मेकफ़ाइल परियोजना है। मैंने कई बार स्पष्ट पुन: अनुक्रमणिका की भी कोशिश की। 3. अन्य समस्याओं के कारण परियोजना को फिर से बनाना था, लेकिन यह * इस * व्यवहार को नहीं बदला। – ysap

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