2012-09-18 21 views
5

मैं सी ++ में एक विकास सिम्युलेटर का निर्माण कर रहा हूं, लेकिन एक "वास्तविक" रननेबल प्रोग्राम के रूप में नहीं, बल्कि एक वर्ग जो अन्य कार्यक्रमों को #include होना चाहिए। World नामक इस वर्ग में update(), getInfo(), आदि जैसे कुछ फ़ंक्शन हैं ...अन्य कार्यक्रमों के लिए उपयोग योग्य कक्षा बनाना

मुझे यहां दो समस्याएं आ रही हैं। सबसे पहले, मुझे नहीं पता कि मुझे कक्षा को कैसे संकलित करना चाहिए, और मुझे कौन सी फाइलें उपयोगकर्ता प्रोग्राम (वह #include वर्ग) प्रदान करनी चाहिए। जाहिर है, कार्यक्रम .hpp फ़ाइल प्राप्त करना चाहिए, लेकिन और क्या? कक्षा World की एक ऑब्जेक्ट फ़ाइल? इसका मतलब यह होगा कि मुझे उपयोगकर्ता प्रोग्राम को g++ World.o user.o -o user सिंटैक्स के साथ संकलित करने की आवश्यकता होगी, लेकिन ऐसा करने से बचने का कोई तरीका है (मेरे संकलन आदेशों में World.o का उल्लेख करना)? उसी तरह मुझे संकलन कमांड में iostream.o शामिल करने की आवश्यकता नहीं है।

दूसरी समस्या यह है कि World वर्ग #include जैसे Organism रूप में कुछ अन्य कक्षाएं, है, जो, बारी में, है ताकि इसे से इनहेरिट करने के लिए Block वर्ग में शामिल किया जा सके। एक World.o फ़ाइल (यदि वह समस्या का उत्तर 1 है) प्राप्त करने के लिए मैं इस कोड को कैसे संकलित कर सकता हूं?

उत्तर

3

मुझे लगता है कि आप अपने World कक्षा से लाइब्रेरी बनाना चाहते हैं। एक पुस्तकालय आम तौर पर निष्पादन योग्य या अन्य पुस्तकालयों से जुड़े/उपयोग किए जाने वाले प्रकारों या कार्यों या चर का एक गुच्छा प्रदान करता है।

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

इंटरफ़ेस परिभाषा में लाइब्रेरी के संभावित उपयोगकर्ता को काम करने की आवश्यकता है। न आधिक न कम। यही कारण है,

  • सार्वजनिक प्रकार, कार्यों की घोषणाओं और चर
  • typedefs कि पुस्तकालय
  • प्रलेखन
  • ...

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


परिभाषित निर्माण विन्यास मैन्युअल रूप से काफी परेशानी जब फ़ाइलें और पुस्तकालयों के बहुत सारे शामिल हैं हो सकता है। अच्छी बात यह है कि इसे स्वचालित रूप से उत्पन्न करने के लिए उपकरण हैं। उदाहरण के लिए cmake।एक उदाहरण cmake विन्यास फाइल ऐसा दिखाई दे सकता:

# CMakeLists.txt 

# add a shared library to build configuration 
add_library(my_library_name SHARED my_library_file1.cpp my_library_file2.cpp) 

# add an executable to build configuration 
add_executable(my_executable_name executable_file1.cpp executable_file2.cpp) 

# link the library to the executable 
target_link_libraries(my_executable_name my_library_name) 

सिर्फ निर्देशिका जहां CMakeLists.txt आवश्यक makefiles निर्माण करने के लिए स्थित है के लिए पथ के साथ cmake चलाने के लिए, तो make चलाने के लिए, तो आप किया जाना चाहिए।


यह भी देखें:

1

आपके पास अपने कोड के उपयोग के लिए आवश्यक हेडर फाइलों का एक सेट होना चाहिए। बाकी सब कुछ उनके उपयोग के लिए लाइब्रेरी में संकलित होना चाहिए ताकि वे हेडर का सेट उनके कोड में और लाइब्रेरी से लिंक कर सकें।