2011-01-23 12 views
24

तो मेरे पास int में मुख्य मुख्य के साथ main.cpp और main2.cpp है। मैं इसके बाहर 2 exes प्राप्त करना चाहता हूँ। क्या यह संभव है और ऐसी परियोजना बनाने के लिए निर्देश क्या होगा?विजुअल स्टूडियो: एक परियोजना कैसे बनाएं जो 2 exe फ़ाइलों को संकलित करेगी?

+0

यह विजुअल स्टूडियो में अन्य भाषाओं के लिए भी सच है। शायद 'सी ++' टैग हटाया जाना चाहिए? –

उत्तर

25

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

यदि आपको दो निष्पादन योग्य की आवश्यकता है, तो आपको दो परियोजनाएं बनाना होगा। चीजों को अपने लिए आसान बनाने के लिए आप उन्हें एक ही समाधान में रख सकते हैं, लेकिन उन्हें अलग-अलग परियोजनाएं होनी चाहिए।

संपादित
ठीक है, के रूप में अन्य उत्तर ने बताया है, यह निश्चित रूप से, किया जा सकता है अगर आप हताश कर रहे हैं। आप एक कस्टम बिल्डिंग चरण जोड़ सकते हैं, जो आपको पसंद है, जिसमें कोई अन्य निष्पादन योग्य भी शामिल है। (हालांकि, बिल्ड सिस्टम यह नहीं समझ पाएगा कि इस फ़ाइल को प्रोजेक्ट आउटपुट माना जाना चाहिए, और इसलिए कुछ परिदृश्य विफल हो सकते हैं: उदाहरण के लिए फ़ाइल स्वचालित रूप से आउटपुट फ़ोल्डर में कॉपी नहीं की जाएगी, और पुनर्निर्माण से पहले निर्भरताओं की जांच करते समय, यह हो सकता है कि कौन सी फाइलें जांचें, और क्या (या कैसे) पुनर्निर्माण करने में सक्षम न हो।)

विजुअल स्टूडियो (कम से कम 2008 तक, 2010 के बारे में सुनिश्चित नहीं) भी एनएमके फाइलों के उपयोग की अनुमति देता है, लेकिन फिर मैं लगता है कि आप "एक विजुअल स्टूडियो प्रोजेक्ट" की परिभाषा को खींच रहे हैं।

लेकिन "सामान्य" परिस्थितियों में, एक परियोजना एक आउटपुट का तात्पर्य है। और दो निष्पादन योग्य प्राप्त करने के लिए, आप आमतौर पर दो परियोजनाएं तैयार करेंगे।

+0

जो कि सच नहीं है, आउटपुट समूहों और प्राथमिक आउटपुट की अवधारणा है, एक कैनोलिक उदाहरण सी ++/सीएक्स है, जो एकाधिक आउटपुट, winmd, और exe उत्पन्न करता है, उदाहरण के लिए, वे दोनों आउटपुट समूहों में जाते हैं, प्राथमिक उत्पादन –

+0

@IonTodirel निश्चित रूप से exe के साथ, और एक मूल डीएलएल आम तौर पर एक .lib उत्पन्न करता है, और इसी तरह। लेकिन मैंने कभी ऐसे परिदृश्य के बारे में नहीं सुना है जहां एक एकल प्रोजेक्ट ने दो .exe फ़ाइलें उत्पन्न की हैं। क्या तुम? :) – jalf

+0

जैसा कि आप कहते हैं, आमतौर पर एक एकल * प्राथमिक * आउटपुट होता है, और शून्य या अधिक "सहायक" फ़ाइलें होती हैं। ओपी दो प्राथमिक आउटपुट – jalf

13

आप एक समाधान जो दो परियोजनाओं शामिल की जरूरत है। समाधान और परियोजनाओं पर विजुअल स्टूडियो दस्तावेज का एक पठन पढ़ें।

0

आपके पास एक दृश्य स्टूडियो प्रोजेक्ट में एक से अधिक मुख्य() फ़ंक्शन नहीं हो सकते हैं। तो आप 2 निष्पादन योग्य संकलित नहीं कर सकते हैं, एकमात्र तरीका एक ही समाधान में दो अलग-अलग परियोजनाओं को बनाना है

3

मुझे नहीं पता कि यह किया जा सकता है, लेकिन ऐसा करने के लिए आपके पास एकमात्र परिवर्तन है, कस्टम बिल्ड चरण के साथ है।

संपादित करें: चूंकि किसी ने इसे कम किया है, इसलिए मैंने एक डमी कॉन्फ़िगरेशन बनाने का परीक्षण किया था।

कस्टम निर्माण कदम मैं दो लिंक-cmds में (प्रतिलिपि बनाई प्रपत्र मूल लिंक-cmdline और यह थोड़ा संशोधित) इनपुट main1.obj resp के रूप में ले रही है। main2.obj और आउटपुट App1.exe resp। App2.exe। इसे संकलन और लिंक करने से पहले निष्पादित किया गया है।

यह काम किया!

नकारात्मकता यह है कि मैं ऑरिनल एक्सई (जो डुप्लिकेट मुख्य फ़ंक्शन पर त्रुटियों) को जोड़ता है (अभी तक) को रोक नहीं सकता है। इस समाधान के लिए main() के साथ स्रोतों को छोड़कर एक कस्टम परियोजना हो सकती है और उन्हें कस्टम-चरण में भी बनाया जा सकता है।

तो प्रश्न का उत्तर होना चाहिए: हाँ, यह किया जा सकता है!

+2

हां यह निश्चित रूप से किया जा सकता है। ओपी बहुत जल्दी स्वीकार किया। विजुअल स्टूडियो मेकफ़ाइल का उपयोग करने पर भी विचार करें। N.B. NMAKE Visual Studios 2010 "Clean" के साथ काम नहीं करता है जब तक कि आप इसे 'devenv/useenv' से शुरू नहीं करते। –

+0

@ एसएनएमकॉनल्ड: अच्छा प्वाइंट !! –

5

यहां मेरा समाधान है, क्योंकि Google खोज में कोई भी इस विधि का सुझाव नहीं देता है। यह काफी सरल है और मैंने इसे अन्य आईडीई (जैसे कोड :: ब्लॉक) में इस्तेमाल किया/देखा है।

अपनी प्रोजेक्ट के भीतर, प्रत्येक आउटपुट के लिए कॉन्फ़िगरेशन बनाएं जो आप चाहते हैं। फिर, प्रत्येक कॉन्फ़िगरेशन में केवल एक main स्रोत फ़ाइल शामिल करें।

वीएस में, इसका मतलब main के साथ प्रत्येक स्रोत फ़ाइल के लिए है: राइट-क्लिक करें -> गुण -> बिल्ड = हाँ से अलग। तो, एक बार पूरा हो जाने के बाद, प्रत्येक कॉन्फ़िगरेशन के लिए केवल एक main स्रोत बनाया गया है। फिर आप प्रोजेक्ट गुणों में प्रत्येक कॉन्फ़िगरेशन के लिए एक अलग आउटपुट निर्दिष्ट कर सकते हैं। मैंने इसे वीएस 2010 पर किया, लेकिन शायद यह अन्य संस्करणों के साथ काम करना चाहिए।

मैं इस दृष्टिकोण का उपयोग कर रहा हूं ताकि वास्तविक परियोजना परियोजनाओं की तुलना में अधिक परीक्षण परियोजनाओं के समाधान के बिना समाधान के बिना मैं एक परियोजना के लिए कई परीक्षण कर सकूं।

0

आप अपने इच्छित प्रत्येक आउटपुट के लिए दो प्रोजेक्ट एक के साथ समाधान बना सकते हैं। फिर बिल्ड मेनू पर जाएं और बैच बिल्ड का चयन करें .. और दोनों परियोजनाओं का चयन करें। यदि आप दोनों exe फ़ाइलों को एक ही स्थान पर रखना चाहते हैं तो आप एक कस्टम पोस्ट-बिल्ड एक्शन निर्दिष्ट कर सकते हैं: दोनों प्रोजेक्ट के लिए: प्रोजेक्ट प्रॉपर्टी पेज देखें और बिल्ड इवेंट्स में पोस्ट-बिल्ड इवेंट का चयन करें, फिर कमांड लाइन फ़ील्ड में प्रवेश करें वह आदेश जो आउटपुट को आपके इच्छित स्थान पर कॉपी करेगा, जैसे कुछ: प्रतिलिपि $ (TargetPath) c: \ yourlocation/y फिर समाधान बनाने के बाद आउटपुट फ़ाइलों को उस स्थान पर कॉपी किया जाएगा।

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