सवाल एक सी ++ पुस्तकालय के लिए निर्देशिका संरचना


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

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

मैंने "सी ++ लाइब्रेरी निर्देशिका संरचना" जैसे शब्दों के लिए Google की कोशिश की, लेकिन कुछ भी उपयोगी नहीं लगता है। मुझे कुछ बहुत ही बुनियादी दिशानिर्देश मिले, लेकिन कोई क्रिस्टल स्पष्ट समाधान नहीं मिला।

कुछ खुले स्रोत पुस्तकालयों को देखते हुए, मैं निम्नलिखित के साथ आया:

\mylib
    \mylib <source files, read somewhere to avoid 'src' directory>
        \include? or just mix .cpp and .h
    \bin <compiled examples, where to put the sources?>
    \python <Python bindings stuff>
    \lib <compiled library>
    \projects <VC++ project files, .sln goes in project root?>
    \include? 
    README
    AUTHORS
    ...

मेरे पास मल्टी-प्लेटफॉर्म डेवलपमेंट / ओपन सोर्स प्रोजेक्ट्स के साथ कोई छोटा सा अनुभव नहीं है और मुझे आश्चर्य है कि मुझे इस तरह की परियोजना को कैसे व्यवस्थित किया जाए इस पर कोई अच्छा दिशानिर्देश नहीं मिल रहा है।

एक आम तौर पर ऐसी पुस्तकालय परियोजना को कैसे ढूढ़ना चाहिए? पढ़ने के लिए क्या सीए की सिफारिश की जानी चाहिए? क्या कुछ अच्छे उदाहरण हैं?


62
2017-09-09 09:03


मूल


एक डुप्लिकेट की तरह लगता है stackoverflow.com/questions/1383174/source-file-organisation/... - RED SOFT ADAIR


जवाब:


यूनिक्स पुस्तकालयों में एक बात बहुत आम है कि वे इस तरह व्यवस्थित हैं कि:

./         Makefile and configure scripts.
./src      General sources
./include  Header files that expose the public interface and are to be installed
./lib      Library build directory
./bin      Tools build directory
./tools    Tools sources
./test     Test suites that should be run during a `make test`

यह कुछ हद तक पारंपरिक यूनिक्स फाइल सिस्टम को दर्शाता है /usr कहा पे:

/usr/src      Sometimes contains sources for installed programs
/usr/include  Default include directory
/usr/lib      Standard library install path
/usr/share/projectname   Contains files specific to the project.

बेशक, ये खत्म हो सकता है /usr/local (जो जीएनयू ऑटोकॉन्फ के लिए डिफ़ॉल्ट इंस्टॉल उपसर्ग है), और वे इस संरचना का पालन नहीं कर सकते हैं।

कोई कठोर और तेज़ नियम नहीं है। मैं व्यक्तिगत रूप से इस तरह से चीजों को व्यवस्थित नहीं करता हूं। (मैं एक का उपयोग करने से बचें ./src/ उदाहरण के लिए, सबसे बड़ी परियोजनाओं को छोड़कर निर्देशिका। मैं autotools का उपयोग नहीं करता, बजाय सीएमके पसंद करते हैं।)

मेरा सुझाव है कि आपको एक निर्देशिका लेआउट चुनना चाहिए आपके लिए समझ में आता है (और आपकी टीम)। जो भी आपके चुने हुए विकास पर्यावरण, उपकरण बनाने और स्रोत नियंत्रण के लिए सबसे समझदार है, करें।


83
2017-09-09 09:41



सीएमके का उपयोग करते समय, आउट-ऑफ-सोर्स बिल्ड बहुत अच्छा लगता है। - Korchkidu


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

जैसा कि ग्रेफैड कहता है, एक लेआउट का उपयोग करें जो आपको समझ में आता है। अगर किसी और को यह पसंद नहीं है, तो उन्हें सिर्फ खुद को पुन: स्थापित करना होगा। सौभाग्य से, अधिकांश उपयोगकर्ता आपके द्वारा चुनी गई संरचना से खुश होंगे। (जब तक यह असली गन्दा नहीं है।)


5
2017-09-09 10:07





मुझे एक अच्छा उदाहरण होने के लिए wxwidgets लाइब्रेरी (ओपन सोर्स) मिलती है। वे कई अलग-अलग प्लेटफ़ॉर्म (Win32, Mac OS X, Linux, FreeBSD, Solaris, WinCE ...) और कंपाइलर्स (एमएसवीसी, जीसीसी, कोडवायरियर, वाटकॉम इत्यादि) का समर्थन करते हैं। आप पेड़ लेआउट यहां देख सकते हैं:

https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/


4
2017-09-09 10:27