Zamestnanec Red Hatu predstavil montážny systém Goals. Vydanie GNU Make 4.2

Richard WM Jones, autor libguestfs, pracujúci v Red Hat, predložené nová montážna pomôcka Ciele, zameraný na odstránenie nedostatkov a problémov v užitočnosti make pri zachovaní celkovej jednoduchosti a zrozumiteľnosti skriptov. Nástroj Make bol navrhnutý v roku 1976 a má množstvo koncepčných nedostatkov; Ciele plánuje tieto nedostatky odstrániť bez zmeny všeobecnej koncepcie.
Zdrojový kód cieľov distribuovaný pod licenciou GPLv2+.

Vyriešiteľné problémy:

  • Podpora iba jednej taktiky riešenia závislostí – „inštrukcia zostavy sa spustí, ak cieľový súbor chýba alebo je starší ako jedna zo závislostí“. Ciele plánuje implementovať ďalšie taktiky, ako je kontrola prítomnosti adresy URL, porovnávanie časov úprav s ľubovoľným súborom, hodnotenie zabudovaného balíka kōji, porovnávanie kontrolných súčtov, spustenie testovacích prípadov so selektívnym preskakovaním testov.
  • Pri spracovávaní cieľov zostavy make neoddeľuje súbory a názvy pravidiel a v dôsledku toho neexistuje žiadna kontrola, či pri spustení pravidla bude súbor, o ktorom tvrdí, že bol vytvorený, skutočne vytvorený. Napríklad, ak máte pravidlo s názvom „test“, ktoré spúšťa skripty s testami, náhodne sa vytvorí súbor s názvom „test“, potom sa už testy nebudú volať, pretože make bude brať do úvahy, že cieľ je zostavený a nevyžaduje akúkoľvek akciu (pre obídenie problému v make, môžete zadať direktívu „.PHONY: test“). Ciele explicitne oddeľujú súbory a názvy pravidiel.

    Zamestnanec Red Hatu predstavil montážny systém Goals. Vydanie GNU Make 4.2

  • Problém s uvedením iba jedného parametra pre montážny návod.

    Zamestnanec Red Hatu predstavil montážny systém Goals. Vydanie GNU Make 4.2

    Ciele vám umožňujú použiť ľubovoľný počet pomenovaných parametrov. Napríklad môžete samostatne extrahovať znak ladiaceho súboru z názvu:

    Zamestnanec Red Hatu predstavil montážny systém Goals. Vydanie GNU Make 4.2

  • Problémy pri interakcii s interpretom shellu. Napríklad potreba kontrolovať úniky medzier v názvoch súborov a adresárov, plytvanie zdrojmi pri spúšťaní samostatného interpretera shellu pri vykonávaní každého príkazu, dvojitá interpretácia znaku „$“ (používa sa v shellu aj v make), berúc do úvahy zárezy.

    Tieto problémy sú v Goals vyriešené použitím symbolu „%“ namiesto „$“ pre premenné zostavy („$“ zostáva len pre shell) pomocou analyzátora LALR(1), ktorý vyžaduje, aby ste cesty a názvy súborov obklopili úvodzovkami a zvýraznili bloky kódu zloženými zátvorkami. Celý príkazový blok sa spustí v jednej inštancii príkazového shellu a v rámci bloku je povolené ľubovoľné formátovanie kódu bez odkazu na špeciálne medzery.

    To bolo:
    cieľ: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Sa stal:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Ďalšie funkcie cieľov:

  • Voliteľná podpora pre zadávanie ľubovoľných názvov a parametrov:

    cieľ všetko = : "cieľ"

    odkaz na cieľ =
    "target" : "foo.o", "bar.o" { ... }

    cieľ zostaviť (meno) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Dva režimy spustenia: režim make, ktorý zodpovedá cieľom zostavenia s názvami súborov (napríklad súbor „foo.o“ zodpovedá cieľu „%name.o“), a režim priamej kompilácie:

    cieľ všetko = : odkaz

    odkaz na cieľ =
    "target" : "foo.o", kompilovať ("bar") { ... }

    cieľ zostaviť (meno) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktika montáže je určená špeciálnymi pravidlami, ktoré možno použiť na určenie potreby opätovného zostavenia cieľa montáže. Ak sa vytvorí odkaz na prítomnosť súboru, potom je to výslovne určené príslušným znakom („cieľ“ pre názov pravidla a *súbor („cieľ“) pre kontrolu súboru).

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

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

  • Vývojár môže definovať ľubovoľné atribúty montážnej taktiky. Príznak „*file“ je definovaný štandardne (@{...} označuje potlačenie výstupu a „exit 99“ signalizuje potrebu prestavby):

    taktika *súbor (názov súboru) = @{
    test -f %názov súboru || výjazd 99
    pre f v %

    Zdroj: opennet.ru

Pridať komentár