أطر CLI للغة C++: كيفية إنشاء تطبيق وحدة تحكم من الصفر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أطر CLI للغة C++: من تحليل الوسائط إلى أدوات وحدة تحكم متكاملة



يعد تطوير أدوات وحدة التحكم بلغة C++ من أكثر المهام شيوعًا التي يواجهها المبرمجون. سواء كانت أداة لمعالجة البيانات، أو مترجمًا، أو سكريبت DevOps - لا يمكن الاستغناء عن التحليل الصحيح لوسائط سطر الأوامر. المعالجة اليدوية لـ argc/argv تتحول بسرعة إلى فوضى من strcmp و atoi، ويصبح دعم الخيارات والعلامات والأوامر الفرعية كابوسًا. وهنا تأتي أطر CLI للمساعدة - وهي مكتبات تتولى كل المهام الروتينية: الوصف التصريحي للواجهة، وتوليد المساعدة، والتحقق من صحة الأنواع، وحتى الإكمال التلقائي للـ shell.



في هذه المقالة، سنستعرض ثلاثة من أشهر الحلول للغة C++: CLI11 و cxxopts و docopt.cpp. ستتعلم كيفية إنشاء تطبيق وحدة تحكم احترافي بسرعة وبأقل جهد.



1. CLI11 - المعيار الحديث



CLI11 (GitHub: CLIUtils/CLI11) هي مكتبة header-only للغة C++11/14/17. تعتبر المعيار الذهبي بفضل واجهة برمجة التطبيقات الموجزة وإمكانياتها القوية: دعم الأوامر الفرعية المتداخلة، والتحقق من صحة النطاقات، والخيارات ذات القيم المتعددة، والعلامات، والوسائط الموضعية، والتوليد التلقائي لـ --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% من الاحتياجات: الخيارات القصيرة/الطويلة، والقيم الافتراضية، والقوائم، والمساعدة. مثالية للأدوات الصغيرة.



مثال: قراءة الإعدادات

#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 << "العمر

توصيات