2012-09-29 12 views
26

मेरे पास एक प्रोजेक्ट (लाइब्रेरी) है जो कोड में कुछ निर्देशिकाओं में विभाजित है। मैं प्रोजेक्ट की रूट निर्देशिका में हेडर फाइलों के लिए g ++ खोज करना चाहता हूं, इसलिए मैं एकाधिक स्रोत फ़ाइलों में एक ही शीर्षलेख फ़ाइलों के लिए पथ शामिल करने से अलग हो सकता हूं।एक विशिष्ट निर्देशिका में हेडर फ़ाइलों के लिए g ++ खोज कैसे करें?

मुख्य रूप से, root/ निर्देशिका उप-निर्देशिका A/, B/ और C/, जो सभी के अंदर .hpp और .cpp फ़ाइलें है। यदि ए में कुछ स्रोत फ़ाइल file.hpp शामिल करना चाहती है, जो बी में थी, तो इसे ऐसा करना होगा: #include "../B/file.hpp"। सी में एक अन्य स्रोत फ़ाइल के लिए वही है, लेकिन अगर ए के पास फाइलों के साथ उप-निर्देशिकाएं थीं जिन्हें file.hpp की आवश्यकता होती है, तो यह असंगत होगा और अगर मैं फ़ाइलों को स्थानांतरित करने का निर्णय लेता हूं तो त्रुटियों का कारण बनता है (क्योंकि पथ शामिल होगा "../../B/file.hpp") ।

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

संपादित करें: पुस्तकालय का उपयोग करने वाले सभी कार्यक्रमों को केवल g++ prog.cpp lib.a -o prog के साथ संकलित करना होगा। इसका मतलब है स्थायी रूप से जी ++ के लिए पथ शामिल करना!

उत्तर

35

ए/code.cpp

#include <B/file.hpp> 

ए/एक/code2.cpp

#include <B/file.hpp> 

संकलित का उपयोग कर:

g++ -I /your/source/root /your/source/root/A/code.cpp 
g++ -I /your/source/root /your/source/root/A/a/code2.cpp 

संपादित करें:

आप पर्यावरण का उपयोग कर सकते पथ g ++ को बदलने के लिए वेरिएबल्स सिर की तलाश में हैं एर फाइलें मैन पेज से:

कुछ अतिरिक्त वातावरण चर प्रीप्रोसेसर के व्यवहार को प्रभावित करते हैं।

CPATH 
    C_INCLUDE_PATH 
    CPLUS_INCLUDE_PATH 
    OBJC_INCLUDE_PATH 

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

सीपीएटीएच निर्देशिकाओं की एक सूची निर्दिष्ट करता है जैसे कि I के साथ निर्दिष्ट किया गया है, लेकिन कमांड लाइन पर II विकल्पों के साथ दिए गए किसी भी पथ के बाद। यह पर्यावरण परिवर्तनीय का उपयोग इस बात पर ध्यान दिए बिना किया जाता है कि कौन सी भाषा प्रीप्रोसेस्ड की जा रही है।

शेष पर्यावरण चर केवल तभी लागू होते हैं जब विशेष भाषा का प्रीप्रोसेसिंग संकेत मिलता है। प्रत्येक निर्देशिकाओं की सूची निर्दिष्ट करता है जैसे कि सिस्टम के साथ निर्दिष्ट है, लेकिन कमांड लाइन पर सिस्टम सिस्टम के साथ दिए गए किसी भी पथ के बाद।

इन सभी चरों में, एक खाली तत्व संकलक को अपनी वर्तमान कार्यशील निर्देशिका खोजने के लिए निर्देश देता है। खाली तत्व या पथ के अंत में दिखाई दे सकते हैं। उदाहरण के लिए, यदि सीपीएटीएच का मूल्य ":/विशेष/शामिल" है, तो इसका प्रभाव समान होता है -आई। -I/विशेष/शामिल हैं।

पर्यावरण परिवेश को बदलने के कई तरीके हैं। बैश पर आप यह कर सकते हैं का संकेत:

$ export CPATH=/your/source/root 
$ g++ /your/source/root/A/code.cpp 
$ g++ /your/source/root/A/a/code2.cpp 

आप निश्चित रूप से अपने Makefile आदि

+0

अरे, मैंने बिना किसी महत्वपूर्ण विवरण के प्रश्न पूछा है, कृपया संपादन देखें, धन्यवाद! – corazza

+0

@Bane, जो सबकुछ बदलता है :-)। मैंने अपने उत्तरों को और अधिक विकल्पों को शामिल करने के लिए संपादित किया जिनका उपयोग किया जा सकता है। – Vikas

+0

ऐसा लगता है कि मैं क्या देख रहा हूं। मैं उन्हें वास्तव में कैसे संपादित कर सकता हूं? (एक सीएलआई निर्देश के साथ, यानी, मुझे अपनी लाइब्रेरी के मेकफ़ाइल के इंस्टॉल नियम में जोड़ने की आवश्यकता है।) – corazza

0

हेडर # शामिल < के साथ शामिल में इस जोड़ सकते हैं> सभी डिफ़ॉल्ट निर्देशिका में खोज की जाएगी, लेकिन आप यह भी जोड़ सकते हैं खोज पथ में अपना स्वयं का स्थान -आई कमांड लाइन तर्क के साथ।

मैं अपने संपादित देखा आप आमतौर पर

/usr/local/include 
libdir/gcc/target/version/include 
/usr/target/include 
/usr/include 

पुष्टि संकलक डॉक्स के साथ हालांकि डिफ़ॉल्ट स्थानों में अपने हेडर स्थापित कर सकता है।

+0

हां, मुझे पता है, लेकिन कृपया संपादन देखें। – corazza

+0

हां ऊपर स्थापित देखें त्वरित समाधान के लिए डिफ़ॉल्ट स्थानों में शामिल है। – NiladriBose

12
gcc -I/path -L/path 
  • -I /path पथ शामिल करने, जीसीसी इस पथ

  • -L /path पुस्तकालय फ़ाइलें हैं, .a में फ़ाइलों ज मिलेगा, .s

0

यह आसान है, का उपयोग करें पथ खोजने के लिए .h फाइलों को जोड़ने के लिए "-B" विकल्प।

उदा। g ++ -B /header_file.h your.cpp -o bin/your_command

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

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