C++ के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: C++ में मोनोरिपॉजिटरी की आवश्यकता क्यों?

\n\n

C++ डेवलपमेंट की दुनिया में, देर-सबेर यह सवाल उठता है: जब प्रोजेक्ट्स की संख्या बढ़ जाती है तो कोड को कैसे व्यवस्थित किया जाए? लाइब्रेरीज़, उपयोगिताएँ, निष्पादन योग्य फ़ाइलें - इन सभी को किसी न किसी तरह से जोड़ा, वर्ज़न किया और बिल्ड किया जाना चाहिए। कई अलग-अलग रिपॉजिटरी (मल्टीरिपॉजिटरी) वाला पारंपरिक दृष्टिकोण अक्सर समस्याओं का कारण बनता है: बदलावों को सिंक्रोनाइज़ करना मुश्किल होता है, इंटीग्रेशन का परीक्षण करना कठिन होता है, और प्रोजेक्ट्स के बीच निर्भरताएँ एक बुरा सपना बन जाती हैं।

\n\n

इसका विकल्प है मोनोरिपॉजिटरी। यह एक एकल रिपॉजिटरी है जिसमें आपके प्रोजेक्ट के सभी घटक संग्रहीत होते हैं: लाइब्रेरीज़, एप्लिकेशन, टेस्ट, दस्तावेज़ीकरण। इस दृष्टिकोण का उपयोग Google, Facebook, Microsoft और कई अन्य कंपनियों में सक्रिय रूप से किया जाता है। C++ के लिए, मोनोरिपॉजिटरी कई लाभ प्रदान करता है:

\n\n
    \n
  • निर्भरताओं का एकीकृत संस्करण - आप हमेशा जानते हैं कि सभी प्रोजेक्ट्स में लाइब्रेरी का कौन सा संस्करण उपयोग किया जा रहा है।
  • \n
  • परमाणु कमिट - लाइब्रेरी API में बदलाव और उसके सभी उपभोक्ताओं को अपडेट करना एक ही कमिट में होता है।
  • \n
  • सरलीकृत CI/CD - सभी घटकों के लिए एक ही पाइपलाइन।
  • \n
  • पारदर्शिता - यह देखना आसान है कि पूरा प्रोजेक्ट कैसे संरचित है।
  • \n
\n\n

इस लेख में, हम CMake का उपयोग करके C++ के लिए मोनोरिपॉजिटरी के व्यावहारिक संगठन पर चर्चा करेंगे, फ़ोल्डर संरचना और कोड उदाहरण दिखाएंगे।

\n\n

1. फ़ोल्डर संरचना: व्यवस्था का आधार

\n\n

एक सफल मोनोरिपॉजिटरी की ओर पहला कदम एक सुविचारित निर्देशिका संरचना है। C++ प्रोजेक्ट के लिए यहाँ एक अनुशंसित टेम्पलेट है:

\n\n
my_project/\n├── CMakeLists.txt          # रूट CMake फ़ाइल\n├── README.md\n├── .gitignore\n├── .clang-format\n├── cmake/                  # सहायक CMake मॉड्यूल\n│   └── FindMyLib.cmake\n├── libs/                   # लाइब्रेरीज़\n│   ├── core/               # कोर लाइब्रेरी\n│   │   ├── CMakeLists.txt\n│   │   ├── include/\n│   │   │   └── core/\n│   │   │       ├── math.h\n│   │   │       └── string_utils.h\n│   │   └── src/\n│   │       ├── math.cpp\n│   │       └── string_utils.cpp\n│   └── network/            # नेटवर्क लाइब्रेरी\n│       ├── CMakeLists.txt\n│       ├── include/\n│       │   └── network/\n│       │       └── http_client.h\n│       └── src/\n│           └── http_client.cpp\n├── apps/                   # निष्पादन योग्य एप्लिकेशन\n│   ├── server/\n│   │   ├── CMakeLists.txt\n│   │   └── src/\n│   │       └── main.cpp\n│   └── cli_tool/\n│       ├── CMakeLists.txt\n│       └── src/\n│           └── main.cpp\n├── tests/                  # टेस्ट\n│   ├── CMakeLists.txt\n│   ├── test_core/\n│   │   ├── CMakeLists.txt\n│   │   └── test_math.cpp\n│   └── test_network/\n│       ├── CMakeLists.txt\n│       └── test_http_client.cpp\n└── third_party/            # बाहरी निर्भरताएँ (git submodules या FetchContent)\n    └── googletest/\n
\n\n

मुख्य सिद्धांत:

\n
    \n
  • libs/ — सभी लाइब्रेरीज़। प्रत्येक लाइब्रेरी अपने स्वयं के CMakeLists.txt के साथ एक अलग फ़ोल्डर है।
  • \n
  • apps/ — सभी निष्पादन योग्य फ़ाइलें। वे libs/ से लाइब्रेरीज़ पर निर्भर करती हैं।
  • \n
  • tests/ — लाइब्रेरीज़ के अनुसार व्यवस्थित टेस्ट।
  • \n
  • third_party/ — बाहरी निर्भरताएँ। उन्हें जोड़ने के लिए git submodules या FetchContent का उपयोग करें।
  • \n
\n\n

2. CMake: मोनोरिपॉजिटरी बिल्ड सेटअप

\n\n

CMake मोनोरिपॉजिटरी के लिए एक आदर्श उपकरण है। आइए देखें कि रूट CMakeLists.txt और लाइब्रेरीज़ के लिए फ़ाइलों को कैसे कॉन्फ़िगर किया जाए।

\n\n

रूट CMakeLists.txt

\n\n
cmake_minimum_required(VERSION 3.20)\nproject(MyProject VERSION 1.0.0 LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 20)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)\n\n# घटकों को चालू/बंद करने के विकल्प\noption(BUILD_TESTS "Build tests" ON)\noption(BUILD_APPS "Build applications" ON)\n\n# बाहरी निर्भरताएँ शामिल करें\ninclude(FetchConte                

ब्लॉग

पुस्तक अनुशंसाएँ