C++ के साथ मोनोरिपॉजिटरी: शुरुआती लोगों के लिए कोड संगठन

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

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

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

मोनोरिपॉजिटरी क्या है और C++ में इसकी आवश्यकता क्यों है?

\n\n

मोनोरिपॉजिटरी (monorepo) कोड प्रबंधन का एक दृष्टिकोण है, जिसमें प्रोजेक्ट के सभी घटक, लाइब्रेरी, उपयोगिताएँ और यहाँ तक कि दस्तावेज़ीकरण भी एक ही रिपॉजिटरी में संग्रहीत होते हैं। C++ प्रोजेक्ट्स के लिए यह विशेष रूप से प्रासंगिक है, क्योंकि भाषा पारंपरिक रूप से फ़ाइलों और निर्भरताओं की स्पष्ट संरचना की मांग करती है।

\n\n

C++ के लिए मोनोरिपॉजिटरी के लाभ:

\n
    \n
  • निर्भरताओं का एकीकृत संस्करण — सभी मॉड्यूल लाइब्रेरी के समान संस्करण का उपयोग करते हैं, जो ABI विरोधों को समाप्त करता है।
  • \n
  • सरलीकृत बिल्ड — एक CMakeLists.txt या बिल्ड सिस्टम पूरे प्रोजेक्ट का प्रबंधन करता है।
  • \n
  • परमाणु कमिट — कई मॉड्यूल में परिवर्तनों को एक कमिट में जोड़ा जा सकता है, जिससे कोड समीक्षा सरल हो जाती है।
  • \n
  • आसान रीफैक्टरिंग — एक स्थान पर API में परिवर्तन सभी आश्रित मॉड्यूल में तुरंत दिखाई देता है।
  • \n
\n\n

हालाँकि, मोनोरिपॉजिटरी सभी के लिए उपयुक्त नहीं है: यदि टीमें पूरी तरह से स्वतंत्र हैं और कंपाइलर के विभिन्न संस्करणों का उपयोग करती हैं, तो मल्टीरिपॉजिटरी पर विचार करना बेहतर है। शुरुआती लोगों के लिए, मोनोरिपॉजिटरी पथ और निर्भरताओं को सेट करने के सिरदर्द से बचने का एक शानदार तरीका है।

\n\n

मुख्य भाग: C++ प्रोजेक्ट के लिए मोनोरिपॉजिटरी बनाना

\n\n

1. निर्देशिका संरचना

\n\n

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

\n\n
my_monorepo/\n├── CMakeLists.txt          # रूट CMake फ़ाइल\n├── cmake/                  # सहायक CMake मॉड्यूल\n│   └── helpers.cmake\n├── libs/                   # लाइब्रेरी\n│   ├── core/               # प्रोजेक्ट का कोर\n│   │   ├── CMakeLists.txt\n│   │   ├── include/core/\n│   │   └── src/\n│   └── utils/              # उपयोगिताएँ\n│       ├── CMakeLists.txt\n│       ├── include/utils/\n│       └── src/\n├── apps/                   # निष्पादन योग्य एप्लिकेशन\n│   ├── main_app/\n│   │   ├── CMakeLists.txt\n│   │   └── main.cpp\n│   └── test_app/\n│       ├── CMakeLists.txt\n│       └── main.cpp\n├── tests/                  # परीक्षण (यदि मॉड्यूल में अंतर्निहित नहीं हैं)\n│   └── test_core.cpp\n├── scripts/                # बिल्ड और CI स्क्रिप्ट\n│   └── build.sh\n├── .gitignore\n└── README.md
\n\n

मुख्य नियम: प्रत्येक मॉड्यूल (लाइब्रेरी या एप्लिकेशन) स्व-निहित होना चाहिए। इसमें अपना CMakeLists.txt, include/ में हेडर फ़ाइलें और src/ में स्रोत कोड शामिल हैं।

\n\n

2. रूट CMakeLists.txt सेट करना

\n\n

रूट CMakeLists.txt पूरे बिल्ड का प्रबंधन करता है। इसे कंपाइलर की सामान्य सेटिंग्स, C++ मानक को परिभाषित करना चाहिए और चाइल्ड मॉड्यूल को शामिल करना चाहिए:

\n\n
cmake_minimum_required(VERSION 3.20)\nproject(MyMonorepo VERSION 1.0.0 LANGUAGES CXX)\n\n# पूरे प्रोजेक्ट के लिए एकीकृत C++17 मानक सेट करें\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)\n\n# परीक्षण बनाने के लिए विकल्प\noption(BUILD_TESTS "Build tests" OFF)\n\n# सहायक मॉड्यूल शामिल करें\ninclude(cmake/helpers.cmake)\n\n# लाइब्रेरी के साथ उपनिर्देशिकाएँ जोड़ें\nadd_subdirectory(libs/core)\nadd_subdirectory(libs/utils)\n\n# एप्लिकेशन जोड़ें\nadd_subdirectory(apps/main_app)\nadd_subdirectory(apps/test_app)\n\n# यदि परीक्षण सक्षम हैं, तो उन्हें शामिल करें\nif(BUILD_TESTS)\n    enable_testing()\n    add_subdirectory(tests)\nendif()
\n\n

3. लाइब्रेरी का उदाहरण: libs/core

\n\n

लाइब्रेरी core पर विचार करें, जिसमें संख्याओं के साथ काम करने के लिए एक क्लास है। फ़ाइल संरचना:

\n\n
libs/core/\n├── CMakeLists.txt\n├── include/core/\n│   └── calculator.h\n└── src/\n    └── calculator.cpp
\n\n

include/core/calculator.h की सामग्री:

\n\n
#ifndef CORE_CALCULATOR_H\n#define CORE_CALCULATOR_H\n\nnamespace core {\n\nclass Calculator {\npublic:\n    Calculator() = default;\n    int add(int a, int b);\n    int multiply(int a, int b);\n};\n\n} // namespace core\n\n#endif // CORE_CALCULATOR_H
\n\n

ब्लॉग

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