Red Hat işçisi Məqsədlərin montaj sistemini təqdim etdi. GNU Make 4.2-nin buraxılışı

Richard WM Jones, müəllif azerbaycanRed Hat adlı yerdə işləyir təqdim etdi yeni montaj proqramı Məqsədləri, skriptlərin ümumi sadəliyini və başa düşülməsini qoruyarkən make-nin faydalılığında çatışmazlıqları və problemləri aradan qaldırmağa yönəlmişdir. make kommunal 1976-cı ildə hazırlanmışdır və bir sıra konseptual çatışmazlıqlara malikdir; Məqsədlər ümumi konsepsiyanı dəyişdirmədən bu çatışmazlıqları aradan qaldırmağı planlaşdırır.
Məqsədlərin mənbə kodu yayılır GPLv2+ altında lisenziyalıdır.

Çıxarıla bilən problemlər:

  • Yalnız bir asılılıq həlli taktikasına dəstək - "məqsəd faylı yoxdursa və ya asılılıqlardan birindən köhnədirsə, montaj təlimatı işə salınır." Məqsədlər digər taktikaları həyata keçirməyi planlaşdırır, məsələn, URL-nin mövcudluğunu yoxlamaq, dəyişiklik vaxtlarını istənilən fayl ilə müqayisə etmək, paketin qurulmasını qiymətləndirmək kōji, yoxlama cəmlərinin müqayisəsi, testlərin seçici olaraq buraxılması ilə test işlərinin icrası.
  • Quraşdırma hədəflərini emal edərkən make, faylları və qayda adlarını ayırmır və nəticədə, bir qayda işlədərkən, yaradıldığını iddia etdiyi faylın həqiqətən yaradılacağına dair heç bir yoxlama yoxdur. Məsələn, testlərlə skriptləri işlədən "test" adlı bir qaydanız varsa, "test" adlı fayl təsadüfən yaradılıbsa, o zaman testlər artıq çağırılmayacaq, çünki make hədəfin qurulduğunu və tələb etmədiyini nəzərə alacaq. hər hansı bir hərəkət (üçün yaradılan problemi həll etmək üçün siz “.PHONY: test” direktivini təyin edə bilərsiniz). Məqsədlər faylları və qayda adlarını açıq şəkildə ayırır.

    Red Hat işçisi Məqsədlərin montaj sistemini təqdim etdi. GNU Make 4.2-nin buraxılışı

  • Montaj təlimatları üçün yalnız bir parametr təmin etmək problemi.

    Red Hat işçisi Məqsədlərin montaj sistemini təqdim etdi. GNU Make 4.2-nin buraxılışı

    Məqsədlər ixtiyari sayda adlandırılmış parametrlərdən istifadə etməyə imkan verir. Məsələn, sazlama faylının işarəsini addan ayrıca çıxara bilərsiniz:

    Red Hat işçisi Məqsədlərin montaj sistemini təqdim etdi. GNU Make 4.2-nin buraxılışı

  • Qabıq tərcüməçisi ilə qarşılıqlı əlaqədə problemlər. Məsələn, fayl və kataloq adlarında boşluqların qaçmasına nəzarət etmək zərurəti, hər əmri yerinə yetirərkən ayrıca qabıq tərcüməçisinin işə salınması üçün resursların israf edilməsi, “$” simvolunun ikiqat şərhi (həm shell, həm də make-də istifadə olunur), girintiləri nəzərə alaraq.

    Bu problemlər Məqsədlərdə montaj dəyişənləri üçün “$” əvəzinə “%” simvolundan istifadə etməklə həll olunur (“$” yalnız qabıq üçün qalır), təhlilçidən istifadə etməklə LALR(1), bu, sizdən yolları və fayl adlarını dırnaqlarla əhatə etməyi və kod bloklarını əyri mötərizələrlə vurğulamağı tələb edir. Bütün komanda bloku əmr qabığının bir nümunəsində işə salınır və blok daxilində xüsusi boşluqlara istinad etmədən ixtiyari kodun formatlaşdırılmasına icazə verilir.

    Bu idi:
    hədəf: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Qəbul edildi:
    "hədəf": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Məqsədlərin digər xüsusiyyətləri:

  • İxtiyari adların və parametrlərin təyin edilməsi üçün əlavə dəstək:

    bütün məqsəd =: "hədəf"

    Məqsəd bağlantısı =
    "hədəf" : "foo.o", "bar.o" { ... }

    məqsəd tərtibi (ad) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • İki işə salma rejimi: quraşdırma hədəflərini fayl adları ilə uyğunlaşdırmaq üçün rejimi yaradın (məsələn, "foo.o" faylı "%name.o" hədəfinə uyğun gəlir) və birbaşa tərtib rejimi:

    məqsəd hamısı =: keçid

    Məqsəd bağlantısı =
    "hədəf" : "foo.o", tərtib ("bar") { ... }

    məqsəd tərtibi (ad) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Quraşdırma taktikası montaj hədəfinin yenidən yığılması ehtiyacını müəyyən etmək üçün istifadə edilə bilən xüsusi qaydalarla müəyyən edilir. Bir faylın mövcudluğuna keçid edilirsə, bu, müvafiq işarə ilə (“qayda adı üçün hədəf” və faylı yoxlamaq üçün * fayl (“hədəf") ilə açıq şəkildə müəyyən edilir.

    "hədəf" : "foo.o", "bar.o" { ... }

    *fayl("hədəf"): *fayl("foo.o"), *fayl("bar.o") { ... }

  • Tərtibatçı montaj taktikasının ixtiyari atributlarını müəyyən edə bilər. "*fayl" bayrağı defolt olaraq müəyyən edilir (@{...} çıxışın dayandırılmasını, "çıxış 99" isə yenidən qurulması ehtiyacını bildirir):

    taktika *fayl (fayl adı) = @{
    test -f %fayl adı || çıxış 99
    f üçün %

    Mənbə: opennet.ru

Добавить комментарий