2008-11-21 10 views
7

मैं कुछ चीजें है कि मैं दृश्य स्टूडियो में प्रदर्शन करने के लिए एक अच्छा तरीका नहीं खोज पाए:परिसर दृश्य स्टूडियो में बनाता है

  1. पूर्व निर्माण कदम एक कोड जनरेटर है कि कुछ स्रोत फ़ाइलें जो बाद में संकलित किया गया है उत्पन्न करता है invokes । इसे परियोजना में रिक्त फाइलों को जोड़कर सीमित सीमा तक हल किया जा सकता है (जिसे बाद में वास्तविक जेनरेट की गई फ़ाइलों के साथ प्रतिस्थापित किया जाता है), लेकिन अगर मैं नाम और/या स्वत: जेनरेट की गई स्रोत फ़ाइलों की संख्या नहीं जानता तो यह काम नहीं करता है। $(wildcard generated/*.c) का उपयोग करके मैं इसे GNU make में आसानी से हल कर सकता हूं। मैं विजुअल स्टूडियो के साथ कुछ कैसे कर सकता हूं?

  2. क्या फ़ाइलों को संशोधित करने की आवश्यकता नहीं है ("make" व्यवहार) यदि मैं प्री-बिल्ड/पोस्ट-बिल्ड इवेंट चल रहा हूं तो क्या मैं रोक सकता हूं? वर्तमान कामकाज एक रैपर स्क्रिप्ट लिखना है जो मेरे लिए टाइमस्टैम्प की जांच करेगा, जो काम करता है, लेकिन थोड़ा सा गुंजाइश है।

  3. वीएस के बाहर बाहरी पुस्तकालयों और शीर्षकों को स्थापित करने का एक अच्छा तरीका क्या है? * निक्स मामले में, वे आमतौर पर सिस्टम पथ में स्थापित होते हैं, या autoconf के साथ स्थित होते हैं। मुझे लगता है कि मैं प्रोजेक्ट सेटिंग्स में उपयोगकर्ता द्वारा परिभाषित मैक्रोज़ के साथ पथ निर्दिष्ट कर सकता हूं, लेकिन इन मैक्रोज़ को रखने के लिए एक अच्छी जगह कहां है ताकि उन्हें आसानी से पाया जा सके और समायोजित किया जा सके?

बस स्पष्ट होना, मुझे पता है कि बेहतर विंडोज निर्माण सिस्टम मौजूद हैं (CMake, SCons) कर रहा हूँ, लेकिन वे आम तौर वी.एस. परियोजना के लिए खुद को फाइल उत्पन्न, और मैं निर्माण प्रणाली वी.एस. मौजूदा में इस परियोजना को एकीकृत करने की आवश्यकता है, तो यह वांछनीय है कि मेरे पास केवल सादा वीएस परियोजना फाइलें हैं, जेनरेट नहीं हैं।

उत्तर

5
  1. आप व्यवहार बनाने की जरूरत है और इसे करने के लिए इस्तेमाल कर रहे हैं, तो आप visual studio makefile projects बनाने और उन्हें अपनी परियोजना में शामिल कर सकते हैं।

  2. यदि आप कम गुंजाइश चाहते हैं, तो आप विजुअल स्टूडियो macros और कस्टम बिल्ड ईवेंट लिख सकते हैं और उन्हें विशिष्ट बिल्ड कॉलबैक/हुक में जोड़ सकते हैं।

  3. आप workspacewhiz जैसे कुछ कोशिश कर सकते हैं जो आपको आपके प्रोजेक्ट के लिए पर्यावरण चर सेट करने की सुविधा देगा, जिसमें फ़ाइल प्रारूप में चेक किया जा सकता है। फिर उपयोगकर्ता उन्हें स्थानीय रूप से बदल सकते हैं।

+1

बिंदु 3 के लिए। वीएस2005 से शुरू होने वाली '.vsprops' फ़ाइलें बेहतर विकल्प हैं। – 0xC0000022L

1

(1)। मुझे इसका एक सरल जवाब नहीं पता है, लेकिन कामकाज हैं:

1 ए। यदि जेनरेट की गई फ़ाइलों की सामग्री टकराव नहीं करती है (यानी कोई सामान्य स्थिर पहचानकर्ता नहीं है), तो आप प्रोजेक्ट में एक फ़ाइल को जोड़ सकते हैं, जैसे AllGeneratedFiles.c, और # जनरेटेड "जेनरेट/फ़ाइल को जोड़ने के लिए अपने जेनरेटर को संशोधित करें। सी "इस फ़ाइल में जब यह जेनरेट/file.c उत्पन्न करता है।

1 बी। या आप जेनरेट की गई फ़ाइलों के लिए एक अलग मेकफ़ाइल-आधारित प्रोजेक्ट बना सकते हैं और एनएमके का उपयोग करके उन्हें बना सकते हैं।

(2)। पोस्ट-बिल्ड इवेंट के बजाय कस्टम बिल्ड नियम का उपयोग करें। आप समाधान एक्सप्लोरर में प्रोजेक्ट नाम पर राइट-क्लिक करके और कस्टम बिल्ड नियमों का चयन करके एक कस्टम बिल्ड नियम जोड़ सकते हैं।

(3)। ऐसा करने का कोई मानक तरीका नहीं है; इसे प्रति परियोजना आधार पर परिभाषित किया जाना है। बाहरी दृष्टिकोणों का पता लगाने के लिए पर्यावरण चर का उपयोग करना एक दृष्टिकोण है।फिर आप परियोजना गुणों में उन पर्यावरण चर का उपयोग कर सकते हैं। आवश्यक टूल और पुस्तकालयों और संबंधित पर्यावरण चर का वर्णन करने वाले readme.txt को जोड़ें जिसे उपयोगकर्ता को सेट करना है, और किसी को भी सेट अप करने के लिए यह आसान होना चाहिए।

+0

उत्तर 3. गलत है। चूंकि वीएस2005 कोई बाहरी सहायता के बिना आपकी परियोजना के दायरे में यह सटीक चीज़ करने के लिए '.vsprops' फ़ाइलों का उपयोग कर सकता है। मैं उनसे बड़े पैमाने पर उपयोग कर रहा हूं और "संपत्ति शीट" ('.vsprops') फ़ाइल में समायोजित केवल कुछ प्रासंगिक मानकों के साथ अपरिवर्तित परियोजनाओं का उपयोग किया है। मुझे एहसास है कि यह जवाब पुराना है, लेकिन उस समय वीएस2005 और 2008 जारी किए गए थे और इस तरह * यह * करने का एक मानक तरीका था। – 0xC0000022L

+0

@ 0xC0000022L मैं सहमत नहीं हूं कि यह गलत है। निश्चित रूप से, आप propsheets का उपयोग कर सकते हैं। हालांकि, यह एक प्रणाली-व्यापी मानक नहीं है। आपको सभी पुस्तकालयों को प्रोपशीट्स के पदानुक्रम के माध्यम से वर्णित करने का अपना सम्मेलन विकसित करना होगा, और लगातार इसे लागू करना होगा। संकल्पनात्मक रूप से, यह (3) में सुझाए गए पर्यावरण चर दृष्टिकोण से अलग नहीं है, और यह आपको विशिष्ट निर्माण प्रणाली में लॉक करने का नुकसान है। – atzz

2

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

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

4

मैं इस सटीक समस्या से गुज़र चुका हूं और मुझे कस्टम बिल्ड नियमों का उपयोग करके यह काम मिल गया है।

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

cl.exe वीएस कंपाइलर का नाम है।

अद्यतन: मैंने हाल ही में सेमेक का उपयोग करने के लिए स्विच किया है, जो इसकी अपनी समस्याओं के साथ आता है, और सेमेक दृश्य स्टूडियो समाधान उत्पन्न कर सकता है। यह अच्छी तरह से काम करता प्रतीत होता है।

1

आप जिस चीज को करने की कोशिश कर रहे हैं उसके आधार पर, आप कभी-कभी कस्टम बिल्ड चरण का उपयोग करके और अपनी निर्भरताओं को सही तरीके से सेट करने के साथ कुछ भाग्य ले सकते हैं। सभी जेनरेट कोड को अपनी परियोजना में रखना उपयोगी हो सकता है और फिर आपकी मुख्य परियोजना इस पर निर्भर करती है।

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