2014-12-30 6 views
5

मेरे कोड में मैं एक हेडर फ़ाइल का उपयोग करता हूं जो दुर्भाग्यवश अलग-अलग लिनक्स वितरण के तहत एक अलग स्थान है।विभिन्न लिनक्स वितरण पर विभिन्न शीर्षलेख फ़ाइल स्थान को कैसे संभालें?

#include <cfitsio/fitsio.h> 

और आर्क लिनक्स में यहाँ:

मेरे मामले में यह cfitsio जो यहाँ OpenSUSE 12.1 में स्थित है से fitsio.h है

#include <fitsio.h> 

मुझे लगता है मैं कुछ पूर्वप्रक्रमक निर्देशों का उपयोग कर सकते एक स्विच बनाने के लिए। मैं इसका परीक्षण करने के लिए इसका उपयोग कर सकता हूं कि क्या मैं लिनक्स या विंडोज़ पर हूं, लेकिन मुझे कोई संकेत नहीं है कि मैं यह जांचने के लिए उपयोग कर सकता हूं कि मैं आर्क लिनक्स पर हूं या नहीं।

या इस मामले को संभालने का कोई और तरीका/रणनीति है?

+0

मैंने किसी भी बड़ी परियोजनाओं पर काम नहीं किया है, लेकिन लिनक्स + मैक/विंडोज के साथ परियोजनाएं करते समय मैं हमेशा प्रीप्रोसेसर निर्देशों के साथ समाप्त होता हूं। – keyser

उत्तर

7

रखें सरल

#include <fitsio.h> 

शामिल फिर, के तहत अतिरिक्त दोनों SUSE के लिए और के लिए आर्क इस हेडर युक्त निर्देशिका, निर्देशिका करने के लिए सूची रास्तों में शामिल हैं:

/path/to/header/cfitsio 
/path/to/header 

यहां तक ​​कि अगर पूर्व पर अस्तित्वहीन है आर्क, यह संकलन के दौरान किसी भी समस्या का कारण नहीं होगा।

+3

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

1

कुछ पुस्तकालय [libraryname]-config प्रोग्राम के साथ आते हैं जो वर्तमान प्लेटफ़ॉर्म पर उस लाइब्रेरी के विरुद्ध संकलन करते समय उपयोग करने के लिए सही कंपाइलर झंडे का उत्पादन करते हैं।

उदाहरण के लिए, libncurses 'ncursesw5-config --cflags --libsArch पर इस का उत्पादन:

-L/usr/lib -lncursesw 

और इस Debian पर:

-I/usr/include/ncursesw 
-lncursesw -ltinfo 

सी कोड में होने #include <curses.h> तो पर्याप्त है, और दोनों में सही ढंग से संकलित कर देगा वितरण।

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