मैं कुछ एकल (git) रिपॉजिटरी में संग्रहीत संबंधित लेकिन स्वतंत्र C ++ परियोजनाओं के संगठन पर कुछ सलाह देना चाहूंगा। परियोजनाओं में CMake का उपयोग किया जाता है।
एक सरल उदाहरण के लिए हम 2 परियोजनाओं की कल्पना करते हैं ए और बी, ए बी पर निर्भर करता है। ए विकसित करने वाले अधिकांश लोग पैकेजिंग सिस्टम के माध्यम से बी प्राप्त करेंगे। इस प्रकार वे केवल ए को संकलित करेंगे। हालांकि, हमें डेवलपर्स को ए और बी दोनों को खुद (और इसे स्थापित करने के लिए) अलग-अलग या एक साथ संकलित करने की अनुमति देनी चाहिए।
यहाँ एक प्रस्ताव है:
└── Repo1
├── CMakeLists.txt (1)
├── A
│ ├── CMakeLists.txt (2)
│ ├── include
│ │ ├── aaa.h
│ │ ├── aaaa.h
│ │ └── CMakeLists.txt (3)
│ └── src
│ ├── aaa.cpp
│ ├── aaaa.cpp
│ └── CMakeLists.txt (4)
├── B
│ ├── CMakeLists.txt (2)
│ ├── include
│ │ ├── bbb.h
│ │ ├── bbbb.h
│ │ └── CMakeLists.txt (3)
│ └── src
│ ├── bbb.cpp
│ ├── bbbb.cpp
│ └── CMakeLists.txt (4)
└── test
├── CMakeLists.txt (5)
└── testaaaa.cpp
(1) सभी परियोजनाओं (यदि कोई हो) के लिए सामान्य सेमीके चर को परिभाषित करें और उपनिर्देशिका शामिल करें। (2) परियोजना को परिभाषित करता है और परियोजना के आवश्यक cmake चर। (3) हेडर को स्थापित करने के लिए परिभाषित करता है और संकलन के लिए आवश्यक है। (4) लाइब्रेरी और बायनेरिज़ को कॉन्फ़िगर करता है। (5) परीक्षण निष्पादनयोग्य और परीक्षण-मामलों को कॉन्फ़िगर करता है।
जैसा कि मैं इसे समझता हूं, प्रत्येक परियोजना को एक XXXConfig.cmake फ़ाइल का उत्पादन करना चाहिए और इसे / usr / स्थानीय / शेयर / सेमीक में स्थापित करना चाहिए। CMake के डॉक्यूमेंट को पढ़ते समय इन फाइलों को लिखना काफी जटिल लगता है।
तुम क्या सोचते हो ? क्या संरचना समझ में आती है?
क्या आपके पास इस तरह की परियोजनाओं के काम करने का उदाहरण है?
CMakeLists.txt
प्रति परियोजना एक फ़ाइल से खुश हैं :A/CMakeLists.txt
(ऐप) मेंB/CMakeLists.txt
(पुस्तकालय) का उपयोग करना शामिल हैadd_subdirectory(...)
।