یکی از کارکنان کلاه قرمزی سیستم مونتاژ اهداف را ارائه کرد. انتشار GNU Make 4.2

ریچارد دبلیو ام جونز، نویسنده libguestfs، کار در ردهت، معرفی شده ابزار مونتاژ جدید اهداف، با هدف از بین بردن کاستی ها و مشکلات در کاربرد make با حفظ سادگی و قابل فهم بودن کلی اسکریپت ها. ابزار make در سال 1976 طراحی شده است و دارای تعدادی کاستی های مفهومی است؛ هدف ها قصد دارند این کاستی ها را بدون تغییر مفهوم کلی برطرف کنند.
کد منبع اهداف توزیع شده توسط دارای مجوز GPLv2+.

مشکلات حل شده:

  • پشتیبانی از تنها یک تاکتیک تفکیک وابستگی - "دستورالعمل اسمبلی در صورتی اجرا می شود که فایل مورد نظر گم شده باشد یا قدیمی تر از یکی از وابستگی ها باشد." اهداف برنامه‌ریزی برای پیاده‌سازی تاکتیک‌های دیگر، مانند بررسی وجود URL، مقایسه زمان‌های اصلاح با هر فایل، ارزیابی ساخت بسته در کوجیمقایسه چک‌سام‌ها، اجرای موارد آزمایشی با پرش انتخابی از آزمون‌ها.
  • هنگام پردازش اهداف ساخت، make فایل‌ها و نام‌های قوانین را از هم جدا نمی‌کند و در نتیجه، هیچ بررسی نمی‌شود که هنگام اجرای یک قانون، فایلی که ادعا می‌کند ایجاد شده است واقعاً ایجاد شود. به عنوان مثال، اگر قانونی به نام "تست" دارید که اسکریپت ها را با تست اجرا می کند، فایلی به نام "test" به طور تصادفی ایجاد می شود، در این صورت تست ها دیگر فراخوانی نمی شوند، زیرا make در نظر می گیرد که هدف ساخته شده است و نیازی به آن ندارد. هر اقدامی (برای حل مشکل در make، می توانید دستورالعمل ".PHONY: test" را مشخص کنید). اهداف به صراحت فایل ها و نام قوانین را از هم جدا می کند.

    یکی از کارکنان کلاه قرمزی سیستم مونتاژ اهداف را ارائه کرد. انتشار GNU Make 4.2

  • مشکل با ارائه تنها یک پارامتر برای دستورالعمل های مونتاژ.

    یکی از کارکنان کلاه قرمزی سیستم مونتاژ اهداف را ارائه کرد. انتشار GNU Make 4.2

    اهداف به شما امکان می دهد از تعداد دلخواه پارامترهای نامگذاری شده استفاده کنید. به عنوان مثال، می توانید به طور جداگانه علامت یک فایل اشکال زدایی را از نام استخراج کنید:

    یکی از کارکنان کلاه قرمزی سیستم مونتاژ اهداف را ارائه کرد. انتشار GNU Make 4.2

  • مشکلات در تعامل با مفسر پوسته. به عنوان مثال، نیاز به کنترل فرار از فضاها در نام فایل ها و دایرکتوری ها، هدر رفتن منابع برای راه اندازی یک مفسر پوسته جداگانه هنگام اجرای هر دستور، تفسیر دوگانه کاراکتر "$" (که در پوسته و ساخت استفاده می شود)، با در نظر گرفتن تورفتگی ها

    این مشکلات در Goals با استفاده از نماد "%" به جای "$" برای متغیرهای اسمبلی ("$" فقط برای پوسته باقی می ماند)، با استفاده از تجزیه کننده حل می شوند. LALR (1)، که از شما می‌خواهد مسیرها و نام فایل‌ها را با نقل قول احاطه کنید و بلوک‌های کد را با پرانتزهای مجعد برجسته کنید. کل بلوک فرمان در یک نمونه از پوسته فرمان راه اندازی می شود و در داخل بلوک، قالب بندی کد دلخواه بدون اشاره به فضاهای خاص مجاز است.

    این بود:
    هدف: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    تبدیل شده است:
    "target": "foo.o"، "bar.o" {
    %CC %CFLAGS %< -o %@
    }

سایر ویژگی های اهداف:

  • پشتیبانی اختیاری برای تعیین نام ها و پارامترهای دلخواه:

    هدف همه = : "هدف"

    پیوند هدف =
    "target" : "foo.o", "bar.o" { ... }

    هدف کامپایل (نام) =
    "%name.o" : "%name.c"، "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • دو حالت راه اندازی: حالت ایجاد برای تطبیق اهداف ساخت با نام فایل (مثلاً فایل "foo.o" با هدف "%name.o" مطابقت دارد) و حالت کامپایل مستقیم:

    هدف همه = : پیوند

    پیوند هدف =
    "target" : "foo.o", compile ("bar") { ... }

    هدف کامپایل (نام) =
    "%name.o" : "%name.c"، "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • تاکتیک‌های مونتاژ توسط قوانین خاصی تعیین می‌شوند که می‌توان از آنها برای تعیین نیاز به مونتاژ مجدد هدف مونتاژ استفاده کرد. اگر پیوندی به وجود یک فایل ایجاد شود، آنگاه این به صراحت از طریق علامت مربوطه تعیین می شود ("هدف" برای نام قانون و *file ("هدف") برای بررسی فایل).

    "target" : "foo.o", "bar.o" { ... }

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

  • توسعه دهنده می تواند ویژگی های دلخواه تاکتیک های اسمبلی را تعریف کند. پرچم "*file" به طور پیش فرض تعریف شده است (@{...} نشان دهنده توقف خروجی است و "خروج 99" نیاز به بازسازی را نشان می دهد):

    تاکتیک *فایل (نام فایل) = @{
    test -f %نام فایل || خروجی 99
    برای f در درصد

    منبع: opennet.ru

اضافه کردن نظر