فهم ملفات Makefiles ودورها في أتمتة المهام البرمجية

ملفات Makefiles تعد من الأدوات المهمة التي يستخدمها المطورون لتنظيم وأتمتة العمليات البرمجية مثل التجميع والبناء. إذا كنت تتعامل مع مشاريع برمجية كبيرة، فإن Makefiles توفر طريقة فعالة لتبسيط المهام المتكررة وتحسين الإنتاجية. من خلال كتابة تعليمات محددة داخل ملف Makefile، يمكنك التحكم في خطوات بناء البرنامج وضمان تنفيذها بدقة وبالترتيب المطلوب. في هذا المقال، سنستعرض مفهوم Makefiles، أهم استخداماتها، وكيفية البدء في إنشاء ملفات Makefile الخاصة بك لتحسين سير عملك البرمجي.

فهم ملفات Makefiles ودورها في أتمتة المهام البرمجية - %categories

النقاط الرئيسية

  • تستخدم Make ملفات Make، التي تعمل على أتمتة عمليات البناء عبر ملفات Make لتجميع التعليمات البرمجية بكفاءة.
  • تتكون ملفات Make من قواعد تحتوي على أهداف وتبعيات وإجراءات.
  • تتطلب ملفات Make المسافة البادئة باستخدام علامات التبويب وليس المسافات، لذا انتبه إلى المسافات الفارغة عند العمل مع ملفات Make.

إذا قمت بتثبيت أي برنامج من التعليمات البرمجية المصدرية، فمن المحتمل أنك استخدمت Make. ولكن ما هو هذا البرنامج وكيف يعمل؟ تعرف على كل شيء عن ملفات Make وكيف يمكنها إحداث ثورة في عملية البناء الخاصة بك.

ما هو Makefiles؟

ترتبط ملفات Make والتجميع ارتباطًا وثيقًا. على الرغم من أنها ليست مخصصة للتجميع فقط، إلا أن برنامج Make نشأ بسبب الإحباطات التي يمكن أن يسببها التجميع.

يأخذ التجميع ملفات المصدر ويحولها إلى شكل آخر. المثال الكلاسيكي هو ملف .c الذي يتم تجميعه إلى ملف كائن .o. تخضع برامج C أيضًا لعملية ربط تحول ملفات .o إلى ملف قابل للتنفيذ النهائي. في الواقع، هناك أربع مراحل منفصلة تشارك في بناء مشروع C:

فهم ملفات Makefiles ودورها في أتمتة المهام البرمجية - %categories

انتشرت عملية التجميع في أوائل سبعينيات القرن العشرين مع تطور لغة C، ولكن اللغات الأحدث مثل Typescript وRust وSass تستخدمها أيضًا. البديل هو التفسير، الذي يستخدم برنامجًا وسيطًا لتشغيل التعليمات البرمجية بدلاً من إنشاء ملف قابل للتنفيذ مستقل. تشمل اللغات المفسرة JavaScript وPython وRuby.

اقرأ أيضا:  أفضل 6 إصلاحات لعدم عمل استطلاعات الرأي في WhatsApp على الهاتف المحمول وسطح المكتب

تعمل البرامج المترجمة عادةً بشكل أسرع – وأحيانًا أسرع كثيرًا – من البرامج المفسرة. يتحقق التجميع أيضًا من التعليمات البرمجية الخاصة بك بحثًا عن أنواع معينة من الأخطاء التي لا يمكن للتفسير التحقق منها إلا في وقت التشغيل، لذلك من الأسهل التأكد من صحة البرامج المترجمة. لكن التجميع يمكن أن يكون عملية بطيئة، خاصة بالنسبة للمشاريع التي تحتوي على مئات أو آلاف ملفات المصدر.

ماذا تفعل ملفات Makefiles؟

تستخدم ملفات Makefiles بواسطة Make، وهو برنامج يساعدك على أتمتة عملية البناء الخاصة بك، بما في ذلك المهام مثل التجميع.

عند تشغيل أمر make، فإنه يبحث عن ملف يسمى Makefile أو makefile افتراضيًا. يجب أن يحتوي هذا الملف على تعليمات حول كيفية تجميع كل ملف في برنامجك أو إنشائه.

تم بناء ملفات Makefiles حول مفهوم “التبعية” (أو “الشرط الأساسي”) الذي يتحقق منه برنامج Make باستخدام طوابع زمنية للملفات. وهذا يعني أن برنامج Make يمكنه تسريع عملية التجميع بشكل كبير: فبدلاً من إعادة تجميع كل ملف مصدر، يقوم برنامج Make بإعادة بناء الحد الأدنى فقط. وبشكل عام، إذا تغير ملف المصدر، يقوم برنامج Make بإعادة تجميعه، وإلا فإنه يتركه كما هو.

كيف تبدو ملفات Makefiles؟

أول شيء يجب أن تعرفه عن ملفات Makefiles هو أن المسافات البيضاء كبيرة. ويُعتبر هذا على نطاق واسع قرار تصميم سيئ، لكننا عالقون فيه، لذا كن حذرًا!

يحتوي ملف Makefiles على سلسلة من القواعد التي تصف كيفية بناء كل مكون. ويبدو النمط العام للقاعدة على النحو التالي:

target: dependencies
    actions

فيما يلي، في الأساس، أبسط ملف makefile، والذي يقوم بتجميع ملف مصدر واحد إلى ملف قابل للتنفيذ:

program: program.c
    gcc -o program program.c

تحذير
السطر الثاني من ملف Makefile هذا مسنن، ويجب أن يكون التباعد حرف تبويب واحد. سواء كنت تقوم بنسخ ولصق ملف Makefile أو كتابته يدويًا، كن حريصًا جدًا على الاحتفاظ بحرف تبويب واحد في بداية الأسطر المسننة. على سبيل المثال، إذا استخدمت أربع مسافات بدلاً من علامة تبويب، فسترى خطأ مثل “Makefile:2: *** missing separator. Stop.”

اقرأ أيضا:  أفضل 6 طرق لإصلاح بطئ الكاميرا في Snapchat على iPhone و Android

في هذا المثال، الهدف هو اسم الملف القابل للتنفيذ النهائي: program. ليس من الضروري أن يتطابق الهدف مع اسم الملف، ولكن هذا يحدث عادةً.

هناك اعتماد واحد فقط لهذا الهدف – program.c – سيستخدمه Make لتحديد ما يجب القيام به. إذا كان ملف “program” أحدث من “program.c”، فلن يفعل Make أي شيء.

كتابة ملف Makefile الأول

لا يوجد شيء مثل الخبرة العملية، ولحسن الحظ، يعد Make سهل الاستخدام في أبسط أشكاله.

تثبيت Make

على توزيعة Linux التي تستخدم apt، مثل Ubuntu أو Mint أو Debian، يمكنك تثبيت Make على النحو التالي:

sudo apt install make

على نظام macOS، يمكنك تثبيت Make عبر Xcode عن طريق تشغيل هذا الأمر:

xcode-select --install

بدلاً من ذلك، إذا كان لديك برنامج Homebrew مثبتًا، قم بتشغيل:

brew install make

نصيحة
إذا رأيت خطأ مثل “make: command not found” عند محاولة تشغيله، فهذا يعني أن برنامج make غير مثبت في PATH. يمكنك إصلاح هذه المشكلة من خلال التحقق من تثبيته بشكل صحيح.

كتابة برنامج اختبار بسيط

يمكنك مشاهدة برنامج Make أثناء العمل بنفسك من خلال اختبار ملف make أعلاه باستخدام برنامج c بسيط. ستحتاج فقط إلى gcc وmake installed لتجربة ذلك.

قم بإنشاء ملف باسم “program.c” واملأه بما يلي:

#include <stdio.h>

int main()
{
    printf("Hello, world.\n");
}

في هذه المرحلة، اختبر برنامجك للتأكد من صحته (وأنك قمت بتثبيت gcc) عن طريق تشغيل الأمر التالي:

gcc -o program program.c

تأكد من أن gcc يقوم ببناء البرنامج بنجاح، ثم قم بإزالته:

rm program

اكتب ملف Makefile الأساسي

الآن قم بإنشاء ملف Makefile المثال (إما باسم “Makefile” أو “makefile”) بالمحتويات التالية:

program: program.c
    gcc -o program program.c

قم بتشغيل Make

في محطتك الطرفية، تأكد من أن دليل العمل الخاص بك يحتوي على ملفات Makefile وprogram.c، ثم قم بتشغيل Make:

make

فهم ملفات Makefiles ودورها في أتمتة المهام البرمجية - %categories

بمجرد التأكد من أن Make قام بتجميع برنامجك وبنائه، اختبر سلوكه عن طريق تشغيله مرة أخرى:

make

فهم ملفات Makefiles ودورها في أتمتة المهام البرمجية - %categories

يخبرك برنامج Make بأن كل شيء محدث، لذا فهو لا يقوم بأي شيء الآن. هذه واحدة من أكبر فوائد برنامج Make: فهو لن يقضي وقتًا إلا في بناء المكونات التي تحتاج إلى إعادة البناء. حاول تحديث ملف المصدر وستلاحظ الفرق:

touch program.c
make

فهم ملفات Makefiles ودورها في أتمتة المهام البرمجية - %categories

ملاحظة
إن الأمر touch هنا يقوم فقط بتحديث وقت تعديل الملف إلى الوقت الحالي. هذه مجرد طريقة سريعة “لخداع” Make ليعتقد أن الملف قد تغير.

اقرأ أيضا:  كيفية إزالة الملصقات من WhatsApp

ما الذي يمكن أن يفعله Make أيضًا؟

إن Make محدود حقًا بطبيعته المستندة إلى الملفات. يمكن لأي ملف أن يكون جزءًا من عملية البناء الخاصة بك ويعمل كهدف أو اعتماد.

هذا يعني أن Make مناسب لمجموعة واسعة من المشاريع. أي شيء بخطوات بناء يمكن التنبؤ بها وقابلة للتكرار مناسب.

على سبيل المثال، خذ مولد موقع ثابت يقوم بإنشاء صفحات ويب من مصادر أخرى، غالبًا ما تتضمن ملفات نصية Markdown. سيعيد ملف Make هذا بناء صفحة ويب معينة:

index.html: index.md
    pandoc index.md index.html

لقد لمسنا هنا سطح ما يمكن لبرنامج Make القيام به. في الواقع، تحتوي ملفات make على أنماط لتحديد القواعد للعديد من الملفات المختلفة، مما يؤدي إلى إنشاء سلاسل اعتماد معقدة.

في المرة القادمة التي تقوم فيها ببناء برنامج، تحقق مما إذا كان هناك ملف make وحاول استكشاف محتوياته. نأمل أن تتمكن من فهم بعض الأساسيات والتعرف على بعض ما يحدث تحت الغطاء. مع وجود دليل GNU make في متناول اليد، يمكنك البدء في استخدام Make لمشاريعك الخاصة لتجنب التوقف غير الضروري.

Makefiles هي أداة قوية لتسهيل العمل على المشاريع البرمجية المعقدة وتحقيق أتمتة عالية الدقة. باستخدام Makefiles، يمكنك تقليل الأخطاء، تحسين الكفاءة، وضمان استمرارية العمل بسلاسة. مع القليل من الممارسة، ستصبح كتابة واستخدام Makefiles جزءًا أساسيًا من سير عملك البرمجي. إذا لم تبدأ باستخدامها بعد، فقد حان الوقت لاستكشاف إمكانياتها والاستفادة منها في مشروعك القادم.

قد يعجبك ايضا