16

समस्याचरण-दर-चरण, मैं विजुअल स्टूडियो 2010 में किसी दिए गए प्रकार की प्रत्येक फ़ाइल के लिए कस्टम बिल्ड चरण कैसे जोड़ूं?

  1. मैं एक दृश्य स्टूडियो 2010 परियोजना में कस्टम फ़ाइलों का एक समूह है।
  2. मुझे बदलने पर उन्हें उन कस्टम फ़ाइलों पर एक उपकरण चलाने की आवश्यकता है।
  3. उपकरण मौजूदा .cpp फ़ाइलों द्वारा शामिल .h फ़ाइलों को उत्पन्न करता है।
  4. मैं उपकरण को निर्माण प्रक्रिया के हिस्से के रूप में चलाने के लिए चाहता हूं।
  5. इसे दृश्य स्टूडियो के भीतर से चलाने की जरूरत है, लेकिन आदर्श रूप से एमएसबिल्ड प्रक्रिया के हिस्से के रूप में भी चलाया जा सकता है।

मौजूदा घटिया समाधान

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

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

वांछित समाधान

मैं दृश्य स्टूडियो की स्थापना की है कि विस्तार .foo की जो कुछ भी फ़ाइल के लिए, यह उपकरण bar.exe चलाता है, जब .foo फ़ाइल परिवर्तन, इससे पहले कि यह सीपीपी कोड संकलित करता है।

चीजें मैं

का प्रयास किया है इस के आधार पर: http://msdn.microsoft.com/en-us/library/3e889s84(v=vs.100).aspx मैं एक .targets और .xml फ़ाइल स्थापित करने के लिए प्रयास किया। हालांकि, मुझे पता नहीं चल सकता कि नया आइटम प्रकार कैसे बनाया जाए, जैसे कि यह विजुअल स्टूडियो में दिखाई देता है, और न ही मैं यह समझ सकता हूं कि इसे हर प्रकार की फाइल पर जादुई रूप से कैसे लागू किया जाए। Foo। उस पर, मुझे नहीं पता है कि यह कोई भी कहां से लिंक करता है जो मेरे bar.exe उपकरण को कॉल करने के कार्य का वर्णन करता है।

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

एमएसडीएन का दस्तावेज पूरी तरह से विफल रहा है, और मुझे लगता है कि मैंने हर संभावित संभावित पृष्ठ को दस बार पढ़ा है, इसका कोई फायदा नहीं हुआ है।

विजुअल स्टूडियो 2008 में, मैं एक .rules फ़ाइल के साथ काम कर बात इस तरह का है कि इस तरह देखा था:

<?xml version="1.0" encoding="utf-8"?> 
<VisualStudioToolFile 
Name="Foo Build Rules" 
Version="8.00" 
> 
<Rules> 
    <CustomBuildRule 
     Name="FooBuild" 
     DisplayName="FooGen" 
     CommandLine="..\..\tools\FooGen.exe [inputs]" 
     Outputs="$(InputName).h" 
     AdditionalDependencies="*.foo" 
     FileExtensions="*.foo" 
     ExecutionDescription="Generating Foos..." 
     > 
     <Properties> 
     </Properties> 
    </CustomBuildRule> 
</Rules> 
</VisualStudioToolFile> 

फिर भी इस कार्यक्षमता 2010 में पदावनत किया गया है, और मैं यह पता लगाने में असमर्थ रहे हैं नई प्रणाली के साथ इसे दोहराने के लिए कैसे।

सहायता?

+0

क्या आपने इसे चेक किया है? http://msdn.microsoft.com/en-us/library/xfsbz6cw(v=vs.100).aspx – hege

+0

जो मैं 2008 में उपयोग कर रहा था। वे अब 2008 में काम नहीं करते हैं। –

+0

मुझे लगता है कि आपने पढ़ना होगा यह भी एक: http://blogs.msdn.com/b/vcblog/archive/2010/04/21/quick-help-on-vs2010-custom-build-rule.aspx। मेरी आँखें क्या पकड़ी गईं यह है कि इसके अनुसार, आपको एक .props फ़ाइल भी चाहिए, शायद यही वह है जो आप खो रहे हैं। हालांकि इसे खुद कोशिश नहीं की है .... – hege

उत्तर

7

अपनी प्रोजेक्ट फ़ाइल में कस्टम आइटम समूह जोड़कर प्रारंभ करें।

नीचे की तरह:

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
     <Message>Copying readme...</Message> 
     <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
     <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
    </ItemGroup> 

अगला एक कस्टम लक्ष्य बना सकते हैं और परिभाषित जहां निर्माण प्रक्रिया में आप निर्माण प्रक्रिया में अपने कस्टम लक्ष्यों को चलाना चाहते हैं।

नीचे दिए गए लिंक विस्तार से और चरण-दर-चरण में समझाते हैं।

उम्मीद है कि इससे मदद मिलती है।

Walk-through: Using MSBuild to Create a Visual C++ Project

How to: Add Custom Build Tools to MSBuild Projects

Note: मौजूदा रिलीज में, आईडीई नए नियमों के निर्माण का समर्थन नहीं करता। इसी कारण से, विज़ुअल सी ++ की पूर्व रिलीज़ का उपयोग करके बनाई गई प्रोजेक्ट से नियम फ़ाइल का उपयोग करने का सबसे आसान तरीका प्रोजेक्ट को वर्तमान रिलीज़ में माइग्रेट करना है।

+0

नीचे वोट क्यों? – SoftwareCarpenter

+0

इस उदाहरण में, 'कस्टमबिल्ड' चरण केवल एक फ़ाइल पर लागू होता है, 'faq.txt'। ओपी एक 'कस्टमबिल्ड' चरण चाहता था जो '* .foo' जैसी कई फाइलों पर चलता है। –

+1

बस अनुवर्ती करने के लिए, 'कस्टमबिल्ड' का उपयोग वाइल्डकार्ड के साथ भी किया जा सकता है, इसलिए '<कस्टमबिल्ड शामिल = "$ (MSBuildProjectDirectory) \ ** \ * का उपयोग करके। Foo"> 'अपेक्षित कार्य करता है। धन्यवाद। –