Make
ما هو Make؟
كتب Stuart Feldman أداة Make في Bell Labs سنة 1976. القصد كان ألا يُعاد بناء كل شيء. Makefile يحفظ هدفاً واعتماداً وأمراً. الهدف اسم الملف الذي تحصل عليه. الاعتماد الملف الذي يجب أن يكون جاهزاً قبل ذلك. أول سطر الأمر يجب أن يكون جدولة لا مسافة. إذا كُتبت مسافة يتوقف Make. النوع الواسع على Linux هو GNU Make. يضع إضافاته فوق Make القديم. الأمر نفسه برنامج آخر: مترجم أو سكربت أو نسخ.
فيمَ يُستخدم Make؟
Make لإعادة بناء الجزء المتغير فقط في مشروع كبير. يقدر أيضاً أن يربط أمراً صغيراً متكرراً بهدف واحد.
- إعادة بناء الملف المتغير فقط في برنامج C
- فتح الاختبار باسم هدف واحد
- جعل أمر التنظيف هدفاً وحده
- حفظ عدة خطوات تحت اسم واحد
ماذا يمكن فعله باستخدام Make؟
بـ Make تفحص هل الهدف قديم. إذا لم يتغير الملف لا يشغّل الأمر مرة أخرى. ليس مترجماً. تستدعي المترجم داخل السطر. إذا أخطأت الجدولة أو المسار يبقى البناء صامتاً أو نصف كامل. يجب قراءة النتيجة من Makefile.
هل تعلم Make صعب؟
كتابة هدف واحد سهلة. الصعوبة في الجدولة والاعتماد. المسافة تشبه الجدولة لكن Make لا يقبلها. عدم كتابة الاعتماد يعد الملف القديم جديداً ويتخطى الأمر. إذا كان الهدف نفسه في مكانين تعمل القاعدة الأخيرة. إذا أخطأت الساعة يحسب Make الملف جديداً أو قديماً.
المزايا والحدود
الميزة: الجزء الذي لم يتغير لا يُعاد بناؤه والقاعدة تبقى في ملف واحد والأداة قديمة وواسعة. الحد: خطأ الجدولة يقع كثيراً وMakefile الكبير صعب القراءة. Make ليس Cargo وليس npm. يستدعي الأمر الذي كتبته حين يأتي الوقت.
أفكار أساسية
الهدف الاسم الذي تريد الحصول عليه. الاعتماد الملف الجاهز قبله. الأمر هو الخطوة نفسها.
- الهدف يقف يسار السطر
- الأمر يبدأ بجدولة
- الملف الذي لم يتغير لا يُعاد بناؤه
- make يشغّل الهدف الذي تسميه
مثال قصير
هذه قاعدة قصيرة تبني برنامجاً من ملفي كائن. الفراغ في سطر الأمر يجب أن يكون جدولة.
app: main.o util.o gcc -o app main.o util.o
أسئلة شائعة
- هل Make لغة برمجة؟ لا. يستدعي أمرك إذا كان الملف قديماً.
- هل Make وCargo الشيء نفسه؟ لا. Cargo لـ Rust. Make يربط الأمر الذي كتبته بهدف.
- هل يبدأ الأمر بمسافة؟ لا. Make التقليدي يريد جدولة. لا يعد سطر المسافة أمراً.