C++ के लिए CLI फ्रेमवर्क: शुरुआत से कंसोल एप्लिकेशन कैसे बनाएं

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

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

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

C++ के लिए CLI फ्रेमवर्क: आर्गुमेंट पार्सिंग से लेकर पूर्ण कंसोल उपयोगिताओं तक



C++ में कंसोल उपयोगिताओं का विकास सबसे सामान्य कार्यों में से एक है जिसका सामना प्रोग्रामर करते हैं। चाहे वह डेटा प्रोसेसिंग टूल हो, कंपाइलर हो या DevOps स्क्रिप्ट — कमांड लाइन आर्गुमेंट्स के सही पार्सिंग के बिना काम नहीं चलता। argc/argv की मैन्युअल हैंडलिंग जल्दी ही strcmp और atoi की उलझन में बदल जाती है, और विकल्पों, फ्लैग और सबकमांड का समर्थन एक बुरा सपना बन जाता है। यहीं पर CLI फ्रेमवर्क मददगार साबित होते हैं — ये लाइब्रेरीज़ सारी नियमित प्रक्रिया अपने हाथ में ले लेती हैं: इंटरफ़ेस का घोषणात्मक विवरण, सहायता पाठ का निर्माण, टाइप सत्यापन और यहां तक कि shell के लिए ऑटो-कम्प्लीशन।



इस लेख में हम C++ के लिए तीन सबसे लोकप्रिय समाधानों पर विचार करेंगे: CLI11, cxxopts और docopt.cpp. आप सीखेंगे कि न्यूनतम प्रयास के साथ जल्दी से एक पेशेवर कंसोल एप्लिकेशन कैसे बनाया जाए।



1. CLI11 — आधुनिक मानक



CLI11 (GitHub: CLIUtils/CLI11) C++11/14/17 के लिए एक header-only लाइब्रेरी है। इसे संक्षिप्त API और शक्तिशाली क्षमताओं के कारण स्वर्ण मानक माना जाता है: नेस्टेड सबकमांड का समर्थन, रेंज सत्यापन, एकाधिक मानों वाले विकल्प, फ्लैग, पोजीशनल आर्गुमेंट और स्वचालित --help जनरेशन।



स्थापना

प्रोजेक्ट में हेडर फ़ाइल CLI11.hpp को कॉपी करना या CMake FetchContent के माध्यम से जोड़ना पर्याप्त है।



उदाहरण: विकल्पों के साथ आर्काइविंग उपयोगिता

#include <CLI/CLI11.hpp>#include <iostream>#include <string>

int main(int argc, char** argv) { CLI::App app("सरल आर्काइवर");

std::string input_file; std::string output_file = "archive.zip"; int compression_level = 5; bool verbose = false;

app.add_option("-i,--input", input_file, "इनपुट फ़ाइल")->required(); app.add_option("-o,--output", output_file, "आउटपुट फ़ाइल"); app.add_option("-c,--compression", compression_level, "संपीड़न स्तर (1-9)") ->check(CLI::Range(1, 9)); app.add_flag("-v,--verbose", verbose, "विस्तृत आउटपुट");

CLI11_PARSE(app, argc, argv);

std::cout << "आर्काइव किया जा रहा है: " << input_file << ""; std::cout << "आउटपुट: " << output_file << ""; std::cout << "स्तर: " << compression_level << ""; if (verbose) std::cout << "डीबग मोड चालू है"; return 0;}


चलाना: ./archiver -i data.txt -o backup.zip -c 9 -v
त्रुटि या --help पर CLI11 स्वयं एक सुंदर विवरण प्रदर्शित करेगा।



2. cxxopts — हल्कापन और सरलता



cxxopts (GitHub: jarro2783/cxxopts) एक और header-only लाइब्रेरी है। यह CLI11 से सरल है, लेकिन फिर भी 90% आवश्यकताओं को पूरा करती है: छोटे/लंबे विकल्प, डिफ़ॉल्ट मान, सूचियाँ और help। छोटी उपयोगिताओं के लिए आदर्श।



उदाहरण: कॉन्फ़िगरेशन पढ़ना

#include <cxxopts.hpp>#include <iostream>

int main(int argc, char* argv[]) { cxxopts::Options options("greeter", "स्वागत कार्यक्रम");

options.add_options() ("n,name", "उपयोगकर्ता का नाम", cxxopts::value<std::string>()) ("a,age", "आयु", cxxopts::value<int>()->default_value("0")) ("v,verbose", "विस्तृत आउटपुट", cxxopts::value<bool>()->default_value("false")) ("h,help", "सहायता");

auto result = options.parse(argc, argv);

if (result.count("help")) { std::cout << options.help() << ""; return 0; }

std::string name = result["name"].as<std::string>(); int age = result["age"].as<int>(); bool verbose = result["verbose"].as<bool>();

std::cout << "नमस्ते, " << name << "!"; if (verbose) std::cout << "आयु

अनुशंसाएँ