2010-07-16 15 views
7

मुझे हाल ही में पता चला है कि आप विजुअल स्टूडियो को कॉन्फ़िगर कर सकते हैं (लेकिन यह प्रश्न किसी भी कंपाइलर के लिए समान है) इंटरमीडिएट .o फ़ाइलों को प्रत्येक व्यक्तिगत प्रोजेक्ट के साथ, स्रोत पेड़ के बाहर एक अलग फ़ोल्डर में डंप करने के लिए। इससे परियोजना को ज़िप या कुछ लाइनों के साथ संग्रहीत करने के लिए संग्रह को साफ करना आसान हो जाता है।"स्रोत से बाहर" क्यों डिफ़ॉल्ट नहीं है?

इस प्रकार की कॉन्फ़िगरेशन अधिक आम क्यों नहीं है? क्या कोई महत्वपूर्ण डाउनसाइड्स हैं?

+2

सुनिश्चित नहीं हैं कि क्यों यह डिफ़ॉल्ट नहीं है, लेकिन तुम सही हो , यह होना चाहिए। एक संपत्ति पत्रक को फाई लिखना चाहिए x यह शायद मेरे वीएस वर्कफ़्लो में मैंने कभी भी सबसे अच्छा परिवर्तन किया है। – jalf

उत्तर

2

यह विजुअल स्टूडियो में डिफ़ॉल्ट है, और काफी समय से (कम से कम वीसी ++ 6 के रूप में) रहा है। इंटरमीडिएट निर्देशिका आउटपुट निर्देशिका के समान ही होती है, स्रोत निर्देशिका नहीं। इसका मतलब है कि सभी ऑब्जेक्ट फाइलें अंतिम आउटपुट के साथ रखी जाती हैं।

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

यह, स्वाभाविक रूप से, निर्माण को तोड़ देता है।

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

+0

हू? डिफ़ॉल्ट रूप से, यह प्रोजेक्ट फ़ोल्डर के तहत एक डीबग/रिलीज सबफ़ोल्डर बनाता है, जिसमें सभी मध्यस्थ फाइलें होती हैं। यह निश्चित रूप से "अंतिम आउटपुट के साथ सभी ऑब्जेक्ट फाइलों" को नहीं रखता है। मैं "स्रोत से बाहर" कहूंगा। – jalf

+0

हाँ, लेकिन यह उन्हें स्रोत फ़ाइलों के साथ या तो एक उपनिर्देशिका में नहीं रखता है। –

+0

'IntDir' के लिए' $ (SolutionDir) \ Build \ $ (ProjectName) \ $ (PlatformToolset) \ $ (प्लेटफ़ॉर्म) \ $ (कॉन्फ़िगरेशन) 'करके आप "अंतिम संकलित जीत" परिदृश्य को हल करते हैं। –

1

यह शायद इतिहास के उत्तर के साथ एक प्रश्न है। पहले सी कंपाइलर्स (और इस प्रकार पहले सी ++ कंपाइलर्स) यूनिक्स पर और उसके लिए लिखे गए थे। यूनिक्स में कुछ भी अपवादों के साथ, कुछ भी 'मानक' जगह नहीं है। इस प्रकार, सामान्य अभ्यास केवल मौजूदा कार्यशील निर्देशिका में सब कुछ डालना है, जब तक कि अन्यथा निर्देश न दिया जाए।

+3

विजुअल स्टूडियो वर्तमान कार्य निर्देशिका में ऑब्जेक्ट फ़ाइलों को आउटपुट नहीं करता है, हालांकि, यह प्रत्येक प्रोजेक्ट में जेनरेट किए गए फ़ोल्डर्स में उन्हें डंप करता है; सवाल यह है कि यह उन्हें समाधान द्वारा समूहित क्यों नहीं करता है। इसके अलावा माइक्रोसॉफ्ट चीजों को एक निश्चित तरीके से करने के लिए बिल्कुल अच्छी तरह से जाना जाता है क्योंकि यह ऐतिहासिक रूप से अन्य लोगों ने इसे कैसे किया है –

+0

समाधान द्वारा उन्हें समूहित करना वास्तव में प्रश्न (नाम झड़पों) में वर्णित समस्या को और भी बदतर बना देगा। माना जाता है कि मैंने कभी भी एक परियोजना के भीतर फ़ाइल नामों को झुकाव नहीं देखा है (गंभीरता से, क्यों ??), लेकिन परियोजनाओं में - संभवतः विभिन्न लोगों द्वारा बनाए रखा - एक समाधान में, यह पूरी तरह से संभव है। –

+0

@ पावेल: इससे समस्या और खराब क्यों होगी?Obj फ़ाइलों को '$ (SolutionDir) \ obj \ $ (ProjectName)' या उस तरह कुछ ऐसा करें और वे प्रोजेक्ट में टकराव नहीं करेंगे, जबकि अभी भी स्रोत पेड़ के बाहर हैं। (भी, ओपी ने नाम संघर्ष के बारे में कुछ भी कहां से पूछा?) – jalf

0

यदि आप क्यूटी निर्माता को अपने विकास आईडीई के रूप में उपयोग करते हैं तो संस्करण 2 अब डिफ़ॉल्ट रूप से 'छाया बिल्ड' को सक्षम बनाता है जो वास्तव में आपके द्वारा वर्णित तरीके से काम करता है और वास्तव में बहुत उपयोगी है। यह चालू या बंद करने के लिए यह एक एकल चेकबॉक्स भी है, जो वीएस की तुलना में थोड़ा कम जटिल है।

1

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

यह सिर्फ एक अनुमान है, लेकिन मैं एक बेहतर व्याख्या नहीं सोच सकते हैं।

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