2010-04-05 17 views
12

यदि मैं निर्देशिका फ़ाइलों को हेडर फाइलों के लिए खोजना चाहता हूं, तो पसंदीदा तरीका क्यों है और क्यों?-I dir vs. -isystem dir

+0

होस्ट मानक सी पुस्तकालय को शामिल या बहिष्कृत करना? –

+0

न ही एक, न ही दूसरा। प्रीप्रोकैसिंग विकल्पों के बारे में जीसीसी मैनुअल में बस पढ़ें और इन दोनों पर ठोकर खाई। – helpermethod

उत्तर

7

gcc documentation for -I से:

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

यदि किसी मानक सिस्टम में निर्देशिका, या सिस्टम के साथ निर्दिष्ट निर्देशिका शामिल है, तो I-the-I विकल्प को अनदेखा कर दिया जाएगा। निर्देशिका अभी भी खोजी जाएगी लेकिन सिस्टम में इसकी सामान्य स्थिति में सिस्टम निर्देशिका के रूप में श्रृंखला शामिल है। यह सुनिश्चित करना है कि जीजी की प्रक्रिया बग्गी सिस्टम हेडर को ठीक करने और include_next निर्देश के लिए ऑर्डरिंग अनजाने में परिवर्तित नहीं है। यदि आपको सिस्टम निर्देशिकाओं के लिए खोज आदेश को बदलने की ज़रूरत है, तो नॉस्टडिंक और/या-सिस्टम विकल्प का उपयोग करें।

तो -I शायद विक्रेता द्वारा आपूर्ति किए गए सिस्टम शीर्षकों जैसे विशेष मामलों को छोड़कर, आपकी शीर्षलेख फ़ाइलों के स्थान को निर्दिष्ट करने का पसंदीदा विकल्प है।

1

आपको अपने शीर्षकों का स्थान निर्दिष्ट करने के लिए उपयोग करना चाहिए।

आपके द्वारा निर्दिष्ट सिस्टम-सिस्टम को बाद में खोजा जाता है- मुझे संसाधित किया जाता है और जीसीसी द्वारा मानक उपचार प्राप्त होता है (मानक सिस्टम हेडर के समान)।

16

यह देखने का एक तरीका हेडर का उपयोग करना है जिसे आप -I के साथ नियंत्रित करते हैं और जिन्हें आप -isystem के साथ नहीं करते हैं (सिस्टम, तृतीय पक्ष libs)। व्यावहारिक अंतर तब आता है जब -isystem हेडर से आने वाली चेतावनियों में चेतावनियां सक्षम की जाती हैं।

0

जब आप एक शीर्षक "Myheader.h" का उपयोग करते हुए- I का उपयोग करते हैं, तो संकलक खोज आदेश उत्पन्न करता है: "Myheader.h", "system/headers"। तो अगर "MyHeader.h" में कुछ नहीं पाया जा सकता है तो आप "सिस्टम/हेडर" पर फ़ॉलबैक करते हैं। हालांकि जब आप सिस्टम सिस्टम का उपयोग करते हैं, तो आप मूल रूप से कह रहे हैं कि जो भी मैं आपको देता हूं उसके साथ "सिस्टम/हेडर" को प्रतिस्थापित करें। तो अब "सिस्टम/हेडर" पर वापस नहीं आ रहा है।

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