0Pricing
C Academy · درس

Makefiles

أتمتة عملية البناء

Makefiles درس مجاني في C Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

لماذا نستخدم Makefiles

سرعان ما تصبح كتابة أوامر gcc يدويًا أمرًا غير عملي. يقرأ make ملف Makefile الذي يصف كيفية بناء مشروعك، ثم ينفذ الأوامر اللازمة فقط.

أما ميزته الأهم فهي أنه يعيد بناء الملف فقط عندما تكون مدخلاته أحدث من مخرجه، مما يوفر قدرًا كبيرًا من وقت الترجمة.

بنية القاعدة

تتكون القاعدة من ثلاثة أجزاء: الهدف، والمتطلبات السابقة، ووصفة البناء.

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

target: prerequisite1 prerequisite2
	<TAB>command to build target

أول Makefile

ينشئ هذا الملف app من ملفي مصدر. يؤدي تشغيل make دون وسيطات إلى بناء الهدف الأول.

إذا لم يتغير أي من الملفين المصدر منذ آخر عملية بناء، فسيطبع make عبارة 'up to date' ولن يفعل شيئًا.

app: main.c math_utils.c
	gcc main.c math_utils.c -o app

قواعد الترجمة المنفصلة

يعني بناء كل ملف كائن بشكل منفصل أن تغيير ملف واحد سيؤدي إلى إعادة ترجمة ذلك الملف فقط.

يتبع make رسم الاعتماديات: عند تغيير main.c، يُعاد تشغيل بناء main.o والربط النهائي فقط.

app: main.o math_utils.o
	gcc main.o math_utils.o -o app

main.o: main.c math_utils.h
	gcc -c main.c

math_utils.o: math_utils.c math_utils.h
	gcc -c math_utils.c

المتغيرات

تزيل المتغيرات التكرار. عرّفها في الأعلى، ثم وسّعها باستخدام $(NAME).

وبذلك يصبح تغيير المترجم أو الرايات ممكنًا من مكان واحد.

CC = gcc
CFLAGS = -Wall -Wextra -g

app: main.o math_utils.o
	$(CC) main.o math_utils.o -o app

المتغيرات التلقائية

يوفر make اختصارات داخل وصفات البناء:

  • $@ — اسم الهدف
  • $^ — جميع المتطلبات السابقة
  • $< — المتطلب السابق الأول

وتُبقي هذه الاختصارات وصفات البناء قصيرة وصحيحة.

app: main.o math_utils.o
	$(CC) $^ -o $@

main.o: main.c
	$(CC) $(CFLAGS) -c $< -o $@

قواعد الأنماط

تُترجم قاعدة نمط واحدة كل ملف .c إلى ملف .o المقابل له، لذا لن تحتاج إلى كتابة قاعدة لكل ملف.

يطابق % أي جذر اسم؛ وبدمجه مع $< و$@ تصبح القاعدة عامة بالكامل.

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

الأهداف الوهمية

الأهداف مثل clean لا تنتج ملفًا بهذا الاسم. صرّح عنها باستخدام .PHONY لكي يشغّلها make دائمًا، حتى إذا وُجد ملف باسم 'clean'.

يزيل clean ملفات نواتج البناء لفرض إجراء بناء جديد.

.PHONY: clean
clean:
	rm -f *.o app

Makefile متكامل

عند جمع العناصر معًا نحصل على: متغيرات، وقاعدة نمط، وقاعدة ربط، وهدف clean وهمي.

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

CC = gcc
CFLAGS = -Wall -Wextra -g
OBJS = main.o math_utils.o

app: $(OBJS)
	$(CC) $^ -o $@

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

.PHONY: clean
clean:
	rm -f $(OBJS) app

كيف يتخذ make قراراته

يقارن make الطوابع الزمنية. يُعاد بناء الهدف إذا كان وقت تعديل أي متطلب سابق أحدث، أو إذا لم يكن الهدف موجودًا.

ولهذا فإن إدراج اعتماديات ملفات الترويسة مهم: فعند تعديل ملف ترويسة، يُعاد بناء كل ملف كائن يعتمد عليه بشكل صحيح.

الأهداف المتعددة والافتراضية

يكون الهدف الأول في Makefile هو الهدف الافتراضي، ويُشغّل عند كتابة make فقط. ومن المعتاد تسميته all.

يمكنك أيضًا بناء هدف محدد باسمه، مثل make clean أو make test، مما يمنح Makefile نقاط دخول مفيدة متعددة.

.PHONY: all
all: app

test: app
	./app --selftest

تحقق سريع

شخّص خطأ شائعًا في Makefile.

مراجعة

أصبح بإمكانك الآن أتمتة عمليات البناء باستخدام make:

  • تتكون القواعد من هدف ومتطلبات سابقة ووصفة بناء مسبوقة بمسافة TAB
  • تقلل المتغيرات والمتغيرات التلقائية ($@ $^ $<) التكرار
  • تتعامل قواعد الأنماط (%.o: %.c) مع كل ملف بطريقة عامة
  • يحدد .PHONY الأهداف التي لا تمثل ملفات، مثل clean
  • يعيد make بناء ما انتهت صلاحيته فقط، اعتمادًا على الطوابع الزمنية

التالي: بناء المكتبات الساكنة والمشتركة.

الأسئلة الشائعة

هل درس «Makefiles» مجاني؟

نعم — نص درس «Makefiles» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «Makefiles»؟

أتمتة عملية البناء تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «Makefiles»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الترجمة الشرطية
  2. مشاريع متعددة الملفات
  3. Makefiles
  4. المكتبات الساكنة والمشتركة
← العودة إلى C Academy