2010-06-17 10 views
5

का उपयोग कर रहा आदर्श चाहते हैं अपने वास्तविक कोड के लिए (बहुत दोहराव) C/C++ कोड जोड़ने के लिए सक्षम होने के लिए है, लेकिन संकलन समय, कोड में जो कहते हैं, एक अजगर की stdout आएगा स्क्रिप्ट, वैसे ही मैक्रोज़ के साथ करता है।उत्पन्न कोड लिपियों

generate_boring_functions(FooBarClass,"FooBarClass.cpp") 

कि है:

उदाहरण के लिए, मान लीजिए कि मैं कार्यों कि किसी वर्ग की जनता विशेषताओं पर निर्भर करना चाहते हैं, बस नीचे दिए मेरी C++ कोड लिखने के लिए एक वरदान होगा सक्षम किया जा रहा जाने परंपरागत साधनों का उपयोग कर व्यवहार्य? या मुझे मेकफ़ाइल और अस्थायी स्रोत फ़ाइलों के साथ हैक करना चाहिए?

धन्यवाद।

+0

मैंने सोचा कि मेकफ़ाइल पारंपरिक साधन थे। आप के मन में क्या था? –

+1

उबाऊ फ़ंक्शन क्या हैं? क्या वे ऐसा कुछ है जिसे टेम्पलेट-आधारित समाधान के साथ हल किया जा सकता है? –

+0

नहीं, यह टेम्पलेट-हल करने योग्य नहीं है, और मुझे पता है कि मेकफ़ाइल पारंपरिक साधन हैं, लेकिन मुझे बस कुछ ऐसा मतलब था जो बेवकूफ सरल "g ++ foo.cpp -o foo" करके काम करेगा, मुझे लगता है कि पूछने के लिए बहुत कुछ है;) – Manux

उत्तर

3

आप सबसे अधिक संभावना कर Makefile थोड़ा बदलाव करने की जरूरत है। यह एक (अजगर) स्क्रिप्ट है कि एक अतिरिक्त preprocessing कदम के रूप में अपने स्रोत फ़ाइलों में से प्रत्येक पढ़ता लिखने के लिए आसान होगा, सही कोड के साथ generate_boring_functions के उदाहरण (या किसी अन्य पटकथा मैक्रो) की जगह संभावित सिर्फ सही तर्क के साथ generate_boring_functions.py लागू द्वारा , और मानक इनपुट पर संकलक को स्रोत भेजकर अस्थायी फ़ाइलों की आवश्यकता को छोड़कर।

अरे, अब मैं कुछ इस तरह बनाना चाहते हैं।

संपादित करें: इस तरह का एक नियम, मेकफ़ाइल में फंस गया, अतिरिक्त निर्माण चरण को संभालने के लिए उपयोग किया जा सकता है। यह अनचाहे है और केवल पूर्णता पर कुछ शॉट के लिए जोड़ा गया है।

%.o : %.cpp 
    python macros.py $< | g++ -x cpp -c - -o [email protected] 
+0

मैं stdin पर संकलक को स्रोत कैसे भेजूं (temp फ़ाइलों का उपयोग नहीं कर रहा)? – Manux

+0

ओए, http://stackoverflow.com/questions/2083874/compile-string-of-c-code – Manux

+0

@ मॅनक्स: यह दृष्टिकोण केवल एक समय में एक स्रोत फ़ाइल के साथ काम करेगा ... –

2

एक makefile (या समतुल्य) एक "पारंपरिक" का मतलब है!

0

आप बूस्ट प्रीप्रोसेसर लाइब्रेरी को आजमा सकते हैं। यह केवल नियमित प्रीप्रोसेसर का विस्तार है, लेकिन यदि आप रचनात्मक हैं, तो आप इसमें लगभग कुछ भी प्राप्त कर सकते हैं।

3

एक makefile आप के लिए पर्याप्त पारंपरिक नहीं है, तो आप चतुराई से लिखा मैक्रो के साथ मिल सकता है।

class FooBarClass 
{ 
    DEFINE_BORING_METHODS(FooBarClass) 

    /* interesting functions begin here */ 
} 

मुझे अक्सर COM कक्षाओं के बॉयलरप्लेट भागों को लागू करने के लिए यह देखा जाता है।

लेकिन अगर आप कुछ है कि न तो make और न ही मैक्रो चाहते हैं, तो मैं नहीं जानता कि क्या आप संभवतः हो सकता है।

+0

+1 मैक्रोज़। –

0

क्या आपने PythoidC पर एक नज़र डाली है? इसका उपयोग सी कोड उत्पन्न करने के लिए किया जा सकता है।

2

मैंने कभी भी इस विशेष तकनीक का उपयोग नहीं किया है, लेकिन ऐसा लगता है कि आप Ned Batchelder's Cog उपकरण जैसे कुछ ढूंढ रहे हैं।

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

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