البرمجة

تنظيم مشاريع CMake بفعالية: أفضل الممارسات والتسهيلات

في عالم تطوير البرمجيات، يعد CMake أحد الأدوات الرائدة التي تُستخدم لإدارة عمليات بناء المشاريع بطريقة مستقلة عن البيئة والمنصات. يتيح CMake للمطورين تحديد بنية المشروع والتعامل مع الاعتمادات بشكل فعال. ومع أنه قد تكون لديك تحقيقًا عمليًا حاليًا باستخدام ملفات CMakeLists.txt لكل مشروع فرعي، إلا أن هناك طرقًا أكثر تنظيمًا وفعالية لتحسين هيكل المشروع الخاص بك.

إذا كنت ترغب في تجنب تكرار محتوى ملف CMakeLists.txt الرئيسي في كل مشروع فرعي، يمكنك استخدام الأمر add_subdirectory في ملف CMakeLists.txt الرئيسي لتضمين مشاريع الفرع دون الحاجة إلى نسخ الشيفرة. يمكنك تنظيم مشروعك على النحو التالي:

cmake
# في CMakeLists.txt الرئيسي cmake_minimum_required(VERSION 3.10) project(MainProject) # تضمين مشاريع الفرع add_subdirectory(sub_dir-1) add_subdirectory(sub_dir-2) add_subdirectory(sub_dir-3) # ربط المشاريع الفرعية بالمشروع الرئيسي إذا كان ذلك ضروريًا target_link_libraries(MainProject SubProject1 SubProject2 SubProject3)

ثم، في ملف CMakeLists.txt لكل مشروع فرعي، يمكنك استخدام الأمر target_include_directories لتوجيه CMake إلى المسارات اللازمة للملفات المصدرية والتعليمات البرمجية المشتركة:

cmake
# في CMakeLists.txt لكل مشروع فرعي project(SubProject1) # تحديد المصادر والملفات الرئيسية للمشروع الفرعي # توجيه CMake إلى المسارات اللازمة target_include_directories(SubProject1 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) target_include_directories(SubProject1 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) # إضافة المكتبات المشتركة إذا كانت مطلوبة target_link_libraries(SubProject1 CommonLibrary)

بهذه الطريقة، يمكنك تحقيق هدفك الرئيسي وهو القدرة على تجميع المشروع ككل عند تنفيذ cmake root/CMakeLists.txt، بينما يمكنك أيضًا تجميع المشاريع الفرعية بشكل فردي باستخدام cmake root/sub-dir/CMakeLists.txt دون الحاجة إلى تكرار الشيفرة أو الإعدادات.

المزيد من المعلومات

بالطبع، دعنا نستمر في استكشاف المزيد من التفاصيل حول كيفية تحسين هيكلية مشروعك باستخدام CMake.

تنظيم ملفات المشروع

قد تكون مناسبة فكرة تنظيم ملفات المشروع الخاصة بك بشكل أفضل، على سبيل المثال:

  • include: يمكنك وضع الملفات الرأسية (headers) هنا.
  • src: يمكن وضع ملفات المصدر (source files) في هذا الدليل.
  • lib: إذا كان لديك مكتبات خارجية (external libraries) يمكنك وضعها هنا.
  • cmake: يمكنك إضافة ملفات CMake إضافية لتنظيم الإعدادات بشكل أفضل.

استخدام متغيرات CMake

يمكنك تعريف متغيرات CMake لتسهيل تحديث المسارات والاعدادات المشتركة. مثال على ذلك:

cmake
# في CMakeLists.txt الرئيسي set(PROJECT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) # في ملفات CMakeLists.txt للمشاريع الفرعية target_include_directories(SubProject1 PUBLIC ${PROJECT_INCLUDE_DIR}) target_include_directories(SubProject1 PRIVATE ${PROJECT_SOURCE_DIR})

استخدام المتغيرات في مشروع الفرع

يمكنك أيضًا تعريف متغيرات لتحديد المسارات في مشروع الفرع:

cmake
# في CMakeLists.txt للمشروع الفرعي set(SUBPROJECT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) set(SUBPROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) target_include_directories(SubProject1 PUBLIC ${SUBPROJECT_INCLUDE_DIR}) target_include_directories(SubProject1 PRIVATE ${SUBPROJECT_SOURCE_DIR})

التعامل مع الاعتمادات

في حال كان لديك اعتمادات خارجية، يمكنك استخدام مدير الحزم (Package Manager) الخاص بـCMake مثل Hunter أو FetchContent لتسهيل تضمين هذه الاعتمادات في مشروعك.

cmake
# في CMakeLists.txt الرئيسي include(FetchContent) FetchContent_Declare( external_library GIT_REPOSITORY https://github.com/example/external_library.git GIT_TAG master ) FetchContent_MakeAvailable(external_library) # في ملفات CMakeLists.txt للمشاريع الفرعية target_link_libraries(SubProject1 external_library)

إضافة مراحل بناء إضافية

يمكنك إضافة مراحل بناء إضافية لتنظيم المزيد من الأشياء، مثل إنشاء ملفات الوثائق (Documentation) أو تنفيذ اختبارات (Testing) أو تثبيت الملفات (Installation).

cmake
# في CMakeLists.txt الرئيسي add_subdirectory(docs) # لملفات الوثائق add_subdirectory(tests) # لملفات الاختبار

الاحتفاظ بملفات CMakeLists.txt الصغيرة والمفهومة

قم بتفكيك ملفات CMakeLists.txt الخاصة بالمشاريع الفرعية إلى مهام صغيرة ومفهومة، مما يسهل الفهم والصيانة في المستقبل.

باستخدام هذه الأفكار والمفاهيم، يمكنك تنظيم مشروعك باستخدام CMake بشكل فعال ومستدام، مع الحفاظ على الترتيب والبساطة في ملفات الإعداد.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر