قدم أحد موظفي ريد هات نظام تجميع الأهداف. إصدار جنو ميك 4.2
ريتشارد دبليو إم جونز، مؤلف libguestfsيعمل لدى ريد هات المقدمة فائدة التجميع الجديدة الأهداف، تهدف إلى إزالة أوجه القصور والمشاكل في فائدة التصميم مع الحفاظ على البساطة الشاملة وسهولة فهم النصوص البرمجية. تم تصميم أداة Make Utility في عام 1976 وهي تعاني من عدد من أوجه القصور المفاهيمية، وتخطط شركة الأهداف لإزالة هذه العيوب دون تغيير المفهوم العام.
كود مصدر الأهداف وزعت من خلال مرخص بموجب GPLv2+.
دعم تكتيك واحد فقط لحل التبعية - "يتم تشغيل تعليمات التجميع إذا كان الملف الهدف مفقودًا أو أقدم من إحدى التبعيات." تخطط الأهداف لتنفيذ أساليب أخرى، مثل التحقق من وجود عنوان URL، ومقارنة أوقات التعديل مع أي ملف، وتقييم الحزمة المضمنة كوجي، مقارنة المجاميع الاختبارية، وتشغيل حالات الاختبار مع التخطي الانتقائي للاختبارات.
عند معالجة أهداف البناء، لا يقوم make بفصل الملفات وأسماء القواعد، ونتيجة لذلك، لا يوجد تحقق من أنه عند تشغيل قاعدة، سيتم إنشاء الملف الذي تدعي أنه تم إنشاؤه بالفعل. على سبيل المثال، إذا كانت لديك قاعدة تسمى "اختبار" تقوم بتشغيل البرامج النصية مع الاختبارات، وتم إنشاء ملف يسمى "اختبار" عن طريق الخطأ، فلن يتم استدعاء الاختبارات بعد الآن، حيث سيعتبر make أن الهدف تم إنشاؤه ولا يتطلب أي إجراء (للتغلب على المشكلة، يمكنك تحديد التوجيه ".PHONY: test"). تفصل الأهداف بوضوح بين الملفات وأسماء القواعد.
مشكلة في توفير معلمة واحدة فقط لتعليمات التجميع.
تتيح لك الأهداف استخدام عدد عشوائي من المعلمات المسماة. على سبيل المثال، يمكنك استخراج علامة ملف التصحيح بشكل منفصل من الاسم:
مشاكل في التفاعل مع مترجم الصدفة. على سبيل المثال، الحاجة إلى التحكم في هروب المسافات في أسماء الملفات والدلائل، وإهدار الموارد عند تشغيل مترجم shell منفصل عند تنفيذ كل أمر، والتفسير المزدوج للحرف "$" (المستخدم في كل من shell وmake)، مع مراعاة المسافات البادئة.
يتم حل هذه المشكلات في الأهداف باستخدام الرمز "%" بدلاً من "$" لمتغيرات التجميع (يبقى "$" للصدفة فقط)، باستخدام محلل لالر(1)، الأمر الذي يتطلب منك إحاطة المسارات وأسماء الملفات بعلامات اقتباس وتمييز كتل التعليمات البرمجية بأقواس متعرجة. يتم تشغيل كتلة الأوامر بأكملها في مثيل واحد من غلاف الأوامر، وداخل الكتلة، يُسمح بتنسيق التعليمات البرمجية التعسفي، دون الرجوع إلى مسافات خاصة.
يتم تحديد تكتيكات التجميع من خلال قواعد خاصة يمكن استخدامها لتحديد الحاجة إلى إعادة تجميع هدف التجميع. إذا تم إنشاء رابط لوجود ملف، فسيتم تحديد ذلك بوضوح من خلال العلامة المقابلة ("target" لاسم القاعدة و*file ("target") للتحقق من الملف).
يمكن للمطور تحديد السمات التعسفية لتكتيكات التجميع. يتم تعريف علامة "*file" افتراضيًا (يشير @{...} إلى منع الإخراج، ويشير "exit 99" إلى الحاجة إلى إعادة البناء):
التكتيك *ملف (اسم الملف) = @{
اختبار -f اسم الملف % || خروج 99
ل و في٪