2012-08-02 22 views
5

मुझे विजुअल स्टूडियो 2008 का उपयोग करके बनाया गया एक बहुत बड़ा एप्लीकेशन मिला है जिसे विंडोज एक्सपी पर चलाने के लिए डिज़ाइन किया गया है। कोड में एक समाधान फ़ाइल होती है जिसमें छह अलग-अलग परियोजनाएं होती हैं। मेरा काम इस एप्लिकेशन को लिनक्स पर चलाने के लिए पोर्ट करना है। मैंने ऐसा पहले कभी कुछ नहीं किया।विजुअल स्टूडियो में समाधान-वाइड परिभाषित करता है?

मैंने कल खोज की कि मेरी कंपनी इस कोड के लिए विंडोज़ पर संकलन करने के लिए चाहती है जब भी मैं इसके साथ काम करूँ। मैं संकलक जो इस तरह के पूर्वप्रक्रमक ब्लॉकों का उपयोग हेडर में शामिल करने के लिए फ़ाइलों को बता सकते हैं,

#define COMPILE_FOR_LINUX 

तब:

#ifdef COMPILE_FOR_LINUX 
// include required Linux headers here and skip Windows header includes 
#else 
// include required Windows headers here and skip Linux header includes 
#endif 

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

#ifdef COMPILE_FOR_LINUX 
// compile Linux specific code used here. 
#else 
// compile Windows specific code used here. 
#endif 

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

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

क्या कोई वैश्विक स्तर पर कुछ परिभाषित करने या एक चर बनाने के लिए एक और अधिक सुरुचिपूर्ण विधि सुझा सकता है जिससे समाधान में प्रत्येक फ़ाइल इसे देख सके?

+0

बस अगर अन्य लोग इसे ढूंढ रहे हैं तो: http://stackoverflow.com/questions/5268177/is-there-anyway-to-define-constant-on-a-solution-basis –

उत्तर

3

यह संकलक आप उपयोग कर रहे पर निर्भर करता है, लेकिन gcc के लिए आप कमांड लाइन से पूर्वप्रक्रमक निर्देशों निर्दिष्ट कर सकते हैं, तो आप सिर्फ अपने makefile में COMPILE_FOR_LINUX जोड़ने की आवश्यकता होगी।

g++ -DCOMPILE_FOR_LINUX ..... 

खिड़कियों के लिए, MSVS का उपयोग कर, तो आप इस परियोजना के गुण (वास्तव में, आप करने के लिए COMPILE_FOR_LINUX के बाद से परिभाषित नहीं है की जरूरत नहीं है, लेकिन आप स्थिरता के लिए एक COMPILE_FOR_WINDOWS जोड़ सकते हैं) में Preprocessor directives टैब को बदल सकते हैं ।

+0

यह वादा करता है। धन्यवाद! –

+0

क्या यह नहीं होना चाहिए -DCOMPILE_FOR_LINUX? – mort

+0

@ mort मुझे नहीं पता, थोड़ी देर में जीसीसी के साथ काम नहीं किया है। क्या यह? –