قدم أحد موظفي ريد هات نظام تجميع الأهداف. إصدار جنو ميك 4.2

ريتشارد دبليو إم جونز، مؤلف libguestfsيعمل لدى ‏ريد هات‏ المقدمة فائدة التجميع الجديدة الأهداف، تهدف إلى إزالة أوجه القصور والمشاكل في فائدة التصميم مع الحفاظ على البساطة الشاملة وسهولة فهم النصوص البرمجية. تم تصميم أداة Make Utility في عام 1976 وهي تعاني من عدد من أوجه القصور المفاهيمية، وتخطط شركة الأهداف لإزالة هذه العيوب دون تغيير المفهوم العام.
كود مصدر الأهداف وزعت من خلال مرخص بموجب GPLv2+.

مشاكل محلولة:

  • دعم تكتيك واحد فقط لحل التبعية - "يتم تشغيل تعليمات التجميع إذا كان الملف الهدف مفقودًا أو أقدم من إحدى التبعيات." تخطط الأهداف لتنفيذ أساليب أخرى، مثل التحقق من وجود عنوان URL، ومقارنة أوقات التعديل مع أي ملف، وتقييم الحزمة المضمنة كوجي، مقارنة المجاميع الاختبارية، وتشغيل حالات الاختبار مع التخطي الانتقائي للاختبارات.
  • عند معالجة أهداف البناء، لا يقوم make بفصل الملفات وأسماء القواعد، ونتيجة لذلك، لا يوجد تحقق من أنه عند تشغيل قاعدة، سيتم إنشاء الملف الذي تدعي أنه تم إنشاؤه بالفعل. على سبيل المثال، إذا كانت لديك قاعدة تسمى "اختبار" تقوم بتشغيل البرامج النصية مع الاختبارات، وتم إنشاء ملف يسمى "اختبار" عن طريق الخطأ، فلن يتم استدعاء الاختبارات بعد الآن، حيث سيعتبر make أن الهدف تم إنشاؤه ولا يتطلب أي إجراء (للتغلب على المشكلة، يمكنك تحديد التوجيه ".PHONY: test"). تفصل الأهداف بوضوح بين الملفات وأسماء القواعد.

    قدم أحد موظفي ريد هات نظام تجميع الأهداف. إصدار جنو ميك 4.2

  • مشكلة في توفير معلمة واحدة فقط لتعليمات التجميع.

    قدم أحد موظفي ريد هات نظام تجميع الأهداف. إصدار جنو ميك 4.2

    تتيح لك الأهداف استخدام عدد عشوائي من المعلمات المسماة. على سبيل المثال، يمكنك استخراج علامة ملف التصحيح بشكل منفصل من الاسم:

    قدم أحد موظفي ريد هات نظام تجميع الأهداف. إصدار جنو ميك 4.2

  • مشاكل في التفاعل مع مترجم الصدفة. على سبيل المثال، الحاجة إلى التحكم في هروب المسافات في أسماء الملفات والدلائل، وإهدار الموارد عند تشغيل مترجم shell منفصل عند تنفيذ كل أمر، والتفسير المزدوج للحرف "$" (المستخدم في كل من shell وmake)، مع مراعاة المسافات البادئة.

    يتم حل هذه المشكلات في الأهداف باستخدام الرمز "%" بدلاً من "$" لمتغيرات التجميع (يبقى "$" للصدفة فقط)، باستخدام محلل لالر(1)، الأمر الذي يتطلب منك إحاطة المسارات وأسماء الملفات بعلامات اقتباس وتمييز كتل التعليمات البرمجية بأقواس متعرجة. يتم تشغيل كتلة الأوامر بأكملها في مثيل واحد من غلاف الأوامر، وداخل الكتلة، يُسمح بتنسيق التعليمات البرمجية التعسفي، دون الرجوع إلى مسافات خاصة.

    كان:
    الهدف: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    أصبح:
    "الهدف": "foo.o"، "bar.o" {
    %CC %CFLAGS %< -o %@
    }

مميزات أخرى للأهداف:

  • دعم اختياري لتحديد الأسماء والمعلمات التعسفية:

    الهدف الكل = : "الهدف"

    رابط الهدف=
    "الهدف" : "foo.o"، "bar.o" { ... }

    تجميع الهدف (الاسم) =
    "%name.o" : "%name.c"، "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • وضعان للإطلاق: جعل الوضع يطابق أهداف البناء مع أسماء الملفات (على سبيل المثال، الملف "foo.o" يطابق الهدف "%name.o")، ووضع التحويل البرمجي المباشر:

    الهدف الكل = : الرابط

    رابط الهدف=
    "target" : "foo.o"، ترجمة ("bar") { ... }

    تجميع الهدف (الاسم) =
    "%name.o" : "%name.c"، "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • يتم تحديد تكتيكات التجميع من خلال قواعد خاصة يمكن استخدامها لتحديد الحاجة إلى إعادة تجميع هدف التجميع. إذا تم إنشاء رابط لوجود ملف، فسيتم تحديد ذلك بوضوح من خلال العلامة المقابلة ("target" لاسم القاعدة و*file ("target") للتحقق من الملف).

    "الهدف" : "foo.o"، "bar.o" { ... }

    *file("target") : *file("foo.o"), *file("bar.o") { ... }

  • يمكن للمطور تحديد السمات التعسفية لتكتيكات التجميع. يتم تعريف علامة "*file" افتراضيًا (يشير @{...} إلى منع الإخراج، ويشير "exit 99" إلى الحاجة إلى إعادة البناء):

    التكتيك *ملف (اسم الملف) = @{
    اختبار -f اسم الملف % || خروج 99
    ل و في٪

    المصدر: opennet.ru

إضافة تعليق