2011-03-16 8 views
59

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

इसके अतिरिक्त, क्या $ (CURDIR) जैसा कुछ है जो मैं स्रोत पथ फ़ोल्डर को पूर्ण पथ की आवश्यकता के बिना शामिल करने के लिए उपयोग कर सकता हूं?

मदद

उत्तर

143

के लिए अग्रिम धन्यवाद आप एक छोटे से कैसे दृश्य स्टूडियो सी ++ फाइलों के साथ काम करता है के बारे में उलझन हो, लेकिन है कि, ठीक है के बाद से प्रलेखन घटिया है। पहली चीजें पहले: सी # या जावा के विपरीत, परियोजना में फ़ाइलों की व्यवस्था आपकी डिस्क पर फ़ाइलों की व्यवस्था से कोई संबंध नहीं है। फ़ाइलें और फ़ोल्डर्स परियोजना में "अंदर" नहीं हैं; प्रोजेक्ट केवल फाइलों और फ़ोल्डर्स के नाम और पथ सूचीबद्ध करता है, जो आपकी डिस्क पर पहले से मौजूद हैं।

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

चलिए एक विशिष्ट उदाहरण के साथ काम करते हैं और मैं आपको दिखाऊंगा कि मैं इसे कैसे व्यवस्थित करूंगा। मान लीजिए कि आप सुपरकैल्क नामक ग्राफिंग कैलकुलेटर प्रोग्राम बना रहे हैं। आपके पास एक स्रोत फ़ोल्डर होगा, और उसके बाद अलग-अलग फ़ाइलों को रखने के लिए स्रोत के अंदर फ़ोल्डर्स बनाएं। मान लीजिए फ़ोल्डरों आपके द्वारा बनाए गए हैं: Input, Output, और Math:

  • SuperCalc\Source\Input
  • SuperCalc\Source\Math
  • SuperCalc\Source\Math\Matrix
  • SuperCalc\Source\Output

आप Source के 3 उपनिर्देशिका है। Math उपनिर्देशिका में एक उपनिर्देशिका है जिसे Matrix कहा जाता है। आपके पास इनपुट, मैथ, मैट्रिक्स और आउटपुट में .cpp फ़ाइलें होंगी। आप विंडोज एक्सप्लोरर या कमांड प्रॉम्प्ट का उपयोग करके इन निर्देशिकाओं (फ़ोल्डरों) को बनाएंगे।

अब आप एक समाधान फ़ाइल (SuperCalc.sln) और एक प्रोजेक्ट फ़ाइल (SuperCalc.vcxproj & SuperCalc.vcxproj.filters) भी बनाना चाहेंगे। विजुअल स्टूडियो के अंदर ऐसा करो। आमतौर पर प्रोजेक्ट फ़ाइल समाधान निर्देशिका के उप-फ़ोल्डर में रहता है; यह विजुअल स्टूडियो द्वारा स्वचालित रूप से आपके लिए किया जाएगा। समाधान फ़ाइल के लिए एक स्थान चुनें - यह स्रोत कोड के रूप में एक ही निर्देशिका संरचना (फ़ोल्डर पेड़) में कहीं होना चाहिए। मैं इसे, स्रोत निर्देशिका के बगल में डालने में सुझाव है:

  • SuperCalc\Build

वी.एस. में जाकर File > New > Project > Visual Studio Solutions > Blank Solution File लेने।समाधान को एक नाम दें (शायद "सुपरकैल्क") और एक स्थान (वह स्थान जिसे हमने अभी SuperCalc\Build निर्देशिका में चुना है)। यह आपके लिए समाधान फ़ाइल तैयार करेगा।

अब समाधान एक्सप्लोरर ("समाधान सुपरकैल्क, 0 प्रोजेक्ट्स") में समाधान पर राइट-क्लिक करें, और Add > New Project चुनें। एक नाम चुनें - यह आपके प्रोग्राम का नाम निष्पादन योग्य होगा, जैसे "सुपरकैल्क"! Win32, या तो Win32 कंसोल एप्लिकेशन (यह एक डॉस-कंसोल प्रोग्राम है) या Win32 प्रोजेक्ट (यह एक सामान्य विंडोज जीयूआई प्रोग्राम है) चुनें। आमतौर पर मैं कुछ महत्वपूर्ण परिवर्तन करने के लिए एप्लिकेशन सेटिंग्स पर क्लिक करता हूं: एक बात के लिए, मैं खाली प्रोजेक्ट चुनता हूं क्योंकि मैं नहीं चाहता कि विजुअल स्टूडियो मेरे लिए फाइलें और कोड बनाये, जब तक कि मैं इसे न कहूं। जब मैं इसे जिस तरह से स्थापित करता हूं, तो मैं फिनिश पर क्लिक करता हूं।

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

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

"सुपरकैल्क" प्रोजेक्ट के स्रोत फ़ाइलें फ़िल्टर पर राइट-क्लिक करें, और जोड़ें> नया फ़िल्टर जोड़ें चुनें। इसे Input नाम दें (सुपरकैल्क \ स्रोत निर्देशिकाओं में से पहला)। फ़िल्टर Math और Output भी बनाएं। Math फ़िल्टर पर राइट-क्लिक करें और Matrix (गणित के अंदर) नामक उप-फ़िल्टर बनाने के लिए जोड़ें> नया फ़िल्टर जोड़ें चुनें।

 
    SuperCalc 
     Source Files 
     Input 
     Math 
      Matrix 
     Output 

जो निर्देशिका (फ़ोल्डर) समानताएं आपको पहले बनाए गए: अब आप इन फिल्टर है। यह मनुष्यों के लिए पूरी तरह से सुविधाजनक व्यवस्था है। विजुअल स्टूडियो इसके बारे में कुछ खास नहीं समझता है। यदि आप बस "फ़ाइल जोड़ें" के लिए वीएस को बताते हैं तो यह फ़ाइल को सही फ़िल्टर में नहीं रखेगा। आपको यह कहना होगा कि इसे कहां रखा जाए।

अपनी .cpp फ़ाइलों को जोड़ने या बनाने के लिए, निर्देशिका के अनुरूप फ़िल्टर नाम का चयन करें जहां .cpp फ़ाइल है। इसलिए, SuperCalc\Source\Math\Matrix\matrix_multiply.cpp फ़ाइल जोड़ने या बनाने के लिए, समाधान एक्सप्लोरर में Matrix फ़िल्टर पर राइट-क्लिक करें, और जोड़ें> नई फ़ाइल जोड़ें या मौजूदा फ़ाइल जोड़ें चुनें। (मौजूदा फ़ाइल जोड़ें जब आप पहले से ही matrix_multiply.cpp लिखा है और आप बस उस परियोजना को बताना चाहते हैं जहां यह है।) Source\Math\Matrix निर्देशिका पर नेविगेट करने के लिए संवाद बॉक्स का उपयोग करें। अपने पूरे कार्यक्रम में सभी स्रोत फ़ाइलों के लिए इस प्रक्रिया को दोहराएं।

आपके पास यह सवाल भी था "क्या $ (CURDIR) जैसा कुछ है जिसका उपयोग मैं स्रोत पथ फ़ोल्डर को पूर्ण पथ की आवश्यकता के बिना शामिल करने के लिए उपयोग कर सकता हूं?" आप भाग्य में हैं: विजुअल स्टूडियो परियोजनाएं पूर्ण पथ का उपयोग नहीं करती हैं! वे सापेक्ष पथ का उपयोग करते हैं। प्रोजेक्ट फ़ाइल स्रोत फ़ाइल वाले निर्देशिका में .vcxproj फ़ाइल वाली निर्देशिका से प्राप्त करने के लिए आवश्यक सापेक्ष पथ संग्रहीत करती है। इसलिए यदि आपने SuperCalc.sln और SuperCalc.vcxproj बनाया है जहां मैंने सुझाव दिया है (SuperCalc\Build निर्देशिका), और आप स्रोत उपनिर्देशिका में अपनी .cpp फ़ाइलों को जोड़ते हैं, तो आप SuperCalc के अंदर देख सकते हैं।vcxproj फ़ाइल नोटपैड का उपयोग कर, और आप लाइनों की तरह दिखाई देंगे:

 
<ClCompile Include="..\..\..\Source\Math\Matrix\matrix_multiply.cpp" /> 

चूंकि कोई निरपेक्ष रास्ते हैं, तो आप पूरे Supercalc निर्देशिका वृक्ष लेने के लिए और इसे कहीं और चला जाता, और यह सब अभी भी काम करेगा। $ (CURDIR) जैसे पर्यावरण चर हैक की आवश्यकता नहीं है।

पता करने के लिए एक अंतिम बात: चूंकि आप अपनी स्रोत फ़ाइलों को कई निर्देशिकाओं में डाल रहे हैं, तो आपको #include आईएनजी हेडर, .h या .hpp फ़ाइलों के साथ समस्या हो सकती है। आपको संकलक को उन निर्देशिकाओं को बताना होगा जहां आपकी शीर्षलेख फ़ाइलें स्थित हैं। वे शायद कई निर्देशिकाओं के बीच बिखरे हुए होंगे। तो प्रोजेक्ट सेटिंग्स को संपादित करें: समाधान एक्सप्लोरर में प्रोजेक्ट नाम पर राइट-क्लिक करें, गुण चुनें, और कॉन्फ़िगरेशन गुण> सी/सी ++> सामान्य पर ड्रिल करें। संपत्ति पत्रक में पहला क्षेत्र "अतिरिक्त शामिल निर्देशिकाएं" कहता है। इससे पहले कि आप कुछ और करें, कॉन्फ़िगरेशन ड्रॉप-डाउन मेनू पर क्लिक करें और सभी कॉन्फ़िगरेशन चुनें। यदि आपके पास 32-बिट और 64-बिट दोनों बिल्ड हैं, तो प्लेटफ़ॉर्म ड्रॉप-डाउन मेनू पर क्लिक करें और सभी प्लेटफ़ॉर्म चुनें। अब "अतिरिक्त शामिल निर्देशिकाएं" पर जाएं और प्रोजेक्ट फ़ाइल की निर्देशिका से संबंधित पथों के साथ सभी स्रोत निर्देशिकाओं में सभी पथ जोड़ें।

 
..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrix;..\..\..\Source\Output 

इस परिवर्तन किया जाता है, स्रोत \ गणित \ मैट्रिक्स \ matrix_multiply.cpp की तरह एक फ़ाइल एक लाइन

#include "input_configuration.hpp" 

# करने के लिए हो सकता है: Supercalc उदाहरण के लिए इसलिए, यह कैसा दिखेगा इनपुट निर्देशिका से एक फ़ाइल शामिल करें, और यह सब बस काम करेगा।

(यह नहीं सभी बस काम करता है, हमेशा की तरह दृष्टिकोण अपने अतिरिक्त शामिल निर्देशिकाएँ के सामने ..\ दृश्यों की संख्या के साथ प्रोजेक्ट गुण और बेला में वापस जाने के लिए है। याद रखें कि हर बार जब आप बनाने के लिए जाना एक परिवर्तन आप का चयन करना होगा सभी विन्यास फिर से -।। अन्यथा अपने परिवर्तनों को केवल वर्तमान विन्यास के लिए लागू होगी (डीबग या रिलीज) वह रूपरेखा नहीं चिपचिपा है)

+1

लिखने के लिए मदद करता है, तो आप उपयोगकर्ता मैक्रो जैसे परिभाषित कर सकते हैं। एक संपत्ति शीट (.props) के माध्यम से $ (स्रोत)। मैं संपत्ति शीट्स में जितनी संभव हो उतनी परियोजना सेटिंग्स बनाने की सलाह देता हूं क्योंकि कई परियोजनाएं सेटिंग्स साझा कर सकती हैं। –

+1

अच्छा जवाब। मैं फ़िल्टर बनाता हूं जो मेरी निर्देशिका संरचना से मेल खाता है, लेकिन मैं एक आवर्ती सिरदर्द में चला जाता हूं, जिसे आपने थोड़ा सा स्पर्श किया था। वीएस को कोई जानकारी नहीं है कि मेरे फ़िल्टर निर्देशिका से जुड़े हुए हैं। जब मैं अनुक्रम में कोड जोड़ता हूं तो यह दर्द होता है: foo.h, foo.c, bar.h, bar.c. मुझे निर्देशिका को सही जगह पर बदलने के लिए याद रखना होगा। वीसी ++ आपकी आखिरी निर्देशिका याद करता है, इसलिए यह हमेशा एक कदम पीछे रहता है। मैंने एमएस को फ़िल्टर के साथ संबद्ध निर्देशिकाओं को अनुमति देने के लिए एक सुझाव पोस्ट किया। यह यहां पर है। अगर आपको यह बग भी है तो कृपया उस सुझाव को ऊपर उठाएं। http://tinyurl.com/bud4zsv –

+1

मीठे! 2015 समुदाय में, एक खाली समाधान नया> प्रोजेक्ट ...> अन्य प्रोजेक्ट प्रकार> विजुअल स्टूडियो समाधान> रिक्त समाधान –

-2

आप अपने समाधान का निर्माण करना चाहते है और अपने स्रोत कोड की तुलना में किसी भिन्न स्थान पर प्रोजेक्ट करें, आप अपनी कार्यशील निर्देशिका बदल सकते हैं:

Project > Properties > Configuration Properties > Debugging > Working Directory

21

यह वास्तव में देखने के लिए संभव है (और हेरफेर) दृश्य स्टूडियो के माध्यम से भौतिक फ़ाइल संरचना, this SO post में वर्णित हैं:

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

+1

आपने अपना दिन बना दिया है! आपका बहुत बहुत धन्यवाद! मेरे पास केवल एक प्रश्न है: क्यों इसे खाली प्रोटेक्ट के लिए डिफॉट द्वारा सेट नहीं किया गया है? @ थॉमथॉम "मैं इस तरह के समाधानों को घंटों के लिए ढूंढ रहा हूं!" - मुझे भी) – Maks

0

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

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

0

मुझे देर हो चुकी है, लेकिन मैं स्वीकृत उत्तर के खिलाफ सलाह देता हूं। कोड पोर्टेबिलिटी के लिए मुख्य कारण। इसके बजाय मैं अनुशंसा करता हूं:

  1. दृश्य स्टूडियो के बाहर फ़ोल्डरों और उपफोल्डरों का लेआउट बनाने के लिए (स्वीकृत उत्तर के समान, लेकिन अगले बिंदु अलग हैं)। प्रत्येक उप-फ़ोल्डर के अंदर
  2. फिर एक include और src फ़ोल्डर बनाने में विन्यास गुण> C/C++> सामान्य> "अतिरिक्त निर्देशिकाएँ शामिल करें" (सभी विन्यास और सभी Plateforms के लिए), जो अपने सभी सबफ़ोल्डर का आधार है एक एकल फ़ोल्डर जोड़ने ।
  3. आपको src फ़ाइलों को जोड़ने और इन सबफ़ोल्डर में फ़ाइलों को शामिल करने के लिए।

  4. अंत में रिश्तेदारों इस बेस फ़ोल्डर के लिए प्रत्येक हेडर फाइलों को शामिल करें।

स्पष्ट है: यदि आपके परियोजना के लेआउट इस प्रकार है:

MyProjet 
    Math 
    include 
     random.h 
     functions.h 
    src 
     random.cpp 
     functions.cpp 
    Probability 
     include 
     normal.h 
     src 
     normal.cpp 

आप functions.cpp में होना चाहिए निम्नलिखित बयान में शामिल हैं:

#include"Math/include/functions.h" 

अगर आप भी करने की जरूरत है functions.cpp में normal कोड का उपयोग करें, फिर functions.cpp का शीर्ष इस तरह दिखना चाहिए:

बस परियोजना बी के "अतिरिक्त निर्देशिकाएँ शामिल करें"

में MyProject आधार फ़ोल्डर जोड़कर:
#include"Math/include/functions.h" 
#include"Probability/include/normal.h" 

ऐसा करने में, आप दर्द के बिना एक अन्य परियोजना (बी) में अपने मठ सबफ़ोल्डर का फिर से उपयोग कर सकेंगे

मुख्य बिंदु केवल एक आधार फ़ोल्डर "अतिरिक्त निर्देशिकाएं शामिल करें" संपत्ति में होना चाहिए।

पुनश्च: वी.एस. 2015 के IntelliSense सुविधा एक बहुत इसके अलावा #include...

+1

यह काफी भंगुर है। स्रोत फ़ाइल में कोड कोड शीर्षलेख पथ की तुलना में संकलक को खोज निर्देशिका को फ़ीड करने के लिए बेहतर है। – ThomasMcLeod

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