5

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

बिना सी ++ संकलक की अंदरूनी कामकाज के बारे में ज्यादा जानने, मेरे अनुभवहीन अनुमान है कि यह जो पूर्व निर्माण घटना चलाता से पहले कंपाइल किया जा करने की जरूरत है गंदा फ़ाइलों की एक सूची बनाता है तो यह याद करते हैं इस स्वत: जनरेट फ़ाइल, क्योंकि इसे प्री-बिल्ड इवेंट के बाद तक छुआ नहीं गया है।

क्या संकलक को सूचित करने का कोई तरीका है कि इसे पूर्व-निर्माण ईवेंट में बदलते समय इस फ़ाइल को पुन: संकलित करने की आवश्यकता है?

+0

मुझे यह समस्या भी मिली है और इसे हल करने में कभी सक्षम नहीं था। मैंने प्रीबिल्ड इवेंट के हिस्से के रूप में अतीत में तारीख को सेट करने का प्रयास किया, मैंने अन्य फाइलों पर तारीखों को सेट करने और पहले से संकलित ऑब्जेक्ट फाइलों को हटाने की कोशिश की और ऐसा कुछ भी काम नहीं कर रहा था। – SoapBox

+0

मैं सभी के साथ आ गया है पूर्व-निर्माण निष्पादन योग्य यह पता लगाने के लिए कि यह कुछ बदल गया है। मेरा यह संबंधित प्रश्न देखें: http://stackoverflow.com/questions/528494/use-domain-specific-language-files-inside-c-project –

+0

दरअसल निष्पादन योग्य जिसका मैं संदर्भ दे रहा हूं, कस्टम निर्माण नियम में उपयोग किया जाता है –

उत्तर

5

मैं उपयोग MSVC 6.

का प्रयास करें ...

Put the python script into the project 
give it a custom build step that invokes python on it, 
to create the cpp file. 

Add the cpp file to your project and do a rebuild all. 

यह कि हम इसे कैसे Oracle प्रो * सी पूर्वप्रक्रमक के साथ क्या है। यह ठीक काम करता है।

+0

मैंने वीएस -2008 में टी 4 ट्रांसफॉर्म के साथ ऐसा कुछ किया है और यह बहुत अच्छा काम करता है। – MrSlippers

2

ऐसा कुछ नहीं है जो मैंने कभी किया है लेकिन आप सीधे अपने प्री-बिल्ड ईवेंट से कंपाइलर (cl.exe) का आह्वान करने का प्रयास कर सकते हैं।

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