مقدمة في CMake: ما هو ولماذا نحتاجه
\n\nCMake (Cross-Platform Make) هو نظام قوي ومتعدد المنصات لأتمتة بناء البرمجيات مفتوح المصدر. على عكس ملفات Makefile التقليدية، لا يقوم CMake ببناء المشروع مباشرة، بل يقوم بإنشاء ملفات بناء للأدوات الأصلية (Make, Ninja, Visual Studio, Xcode) بناءً على ملفات تكوين بسيطة CMakeLists.txt.
لماذا نحتاج CMake؟
\n- \n
- التعددية المنصية: يمكن بناء نفس الكود على Windows و Linux و macOS دون تغيير التكوين. \n
- إدارة التبعيات: دعم مدمج للبحث عن المكتبات الخارجية وربطها (Boost, OpenCV, Qt وغيرها). \n
- المرونة: دعم مولدات مشاريع مختلفة (Visual Studio, Xcode, Ninja, Unix Makefiles). \n
- النمطية: إمكانية إنشاء مكتبات (ثابتة وديناميكية)، ملفات قابلة للتنفيذ، واختبارات. \n
- التكامل مع بيئات التطوير المتكاملة (IDE): بيئات التطوير الحديثة (CLion, VS Code, Qt Creator) تدعم CMake بشكل مدمج. \n
أصبح CMake المعيار الفعلي لمشاريع C++. تستخدمه شركات عملاقة مثل Google (TensorFlow, Chrome)، Microsoft (VS Code)، KDE، LLVM/Clang وغيرها الكثير.
\n\nتثبيت CMake
\n\nعلى عكس مكتبات Python، لا يتم تثبيت CMake عبر pip. إنه تطبيق مستقل. دعنا ننظر في التثبيت لأنظمة التشغيل الرئيسية:
\n\nWindows
\n- \n
- قم بتنزيل المثبت من الموقع الرسمي (اختر الإصدار الخاص بـ Windows — .msi أو .zip). \n
- قم بتشغيل التثبيت. تأكد من تحديد الخيار "Add CMake to the system PATH for all users". \n
- بعد التثبيت، تحقق:
cmake --versionفي سطر الأوامر. \n
Linux (Ubuntu/Debian)
\nsudo apt update\nsudo apt install cmake\ncmake --version\n\nmacOS (Homebrew)
\nbrew install cmake\ncmake --version\n\nالتحقق من التثبيت
\nبعد التثبيت، قم بتنفيذ الأمر في الطرفية:
\ncmake --version\n# يجب أن يكون الناتج مشابهاً لـ:\n# cmake version 3.27.0\n\nبداية سريعة: أول مشروع باستخدام CMake
\n\nلنقم بإنشاء مشروع بسيط "Hello World" باستخدام CMake.
\n\nهيكل المشروع
\nmy_project/\n├── CMakeLists.txt\n└── main.cpp\n\nملف main.cpp
\n#include <iostream>\n\nint main() {\n std::cout << "Hello, CMake!" << std::endl;\n return 0;\n}\n\nملف CMakeLists.txt
\ncmake_minimum_required(VERSION 3.10)\nproject(HelloWorld VERSION 1.0 LANGUAGES CXX)\n\nadd_executable(hello main.cpp)\n\nبناء المشروع
\nmkdir build\ncd build\ncmake ..\ncmake --build .\n./hello\n\nشرح:
\n- \n
cmake_minimum_required— يحدد الحد الأدنى لإصدار CMake. \n project— يحدد اسم المشروع واللغة (CXX لـ C++). \n add_executable— ينشئ ملفًا قابلاً للتنفيذ من الملفات المصدرية. \n
الأساليب والوظائف الأساسية في CMake
\n\n1. cmake_minimum_required()
\nالوصف: يحدد الحد الأدنى لإصدار CMake المطلوب لبناء المشروع. إذا كان إصدار CMake أقل من المحدد، فسيتم عرض خطأ.
\nالمعلمات:
\n- \n
VERSION— الإصدار بالتنسيق major.minor[.patch[.tweak]] \n FATAL_ERROR— اختياري، يسبب خطأ فادحًا عند عدم تطابق الإصدار \n
مثال:
\ncmake_minimum_required(VERSION 3.16 FATAL_ERROR)\n\n2. project()
\nالوصف: يحدد اسم المشروع ومعلماته. يجب أن