Zamestnanec Red Hat predstavil systém zostavovania Goals. Vydanie GNU Make 4.2

Richard Jones (Richard WM Jones), autor libguestfs, pracujúci v spoločnosti Red Hat, predstavil nový nástroj na zostavovanie Ciele, zameraný na odstránenie nedostatkov a problémov v nástroji make pri zachovaní celkovej jednoduchosti a prehľadnosti skriptov. Nástroj make bol navrhnutý v roku 1976 a má množstvo konceptuálnych nedorobkov, ktoré sa plánuje odstrániť v Ciele, pričom sa zachová celková koncepcia.
Zdrojový kód Ciele distribuovaný pod licenciou GPLv2+.

Riešené problémy:

  • Podpora iba jednej taktiky riešenia závislostí — „príkaz na zostavenie sa spustí, ak cieľový súbor chýba alebo je starší než jedna z jeho závislostí“. V Ciele sa plánuje implementácia aj ďalších taktík, ako napríklad kontrola prítomnosti URL, porovnávanie času zmeny s akýmkoľvek súborom, hodnotenie zostavovania balíka v Koji, porovnávanie kontrolných súčtov, spúšťanie testovacích sada s selektívnym vynechaním testov.
  • Pri spracovávaní zostavovacích cieľov nástroj make nerozdeľuje súbory a mená pravidiel, a z toho dôvodu chýba overovanie, že pri spustení pravidla bude skutočne vytvorený súbor, ktorého vznik je deklarovaný. Napríklad, ak existuje pravidlo s názvom „test“, ktoré spúšťa skripty s testami, a náhodou sa vytvorí súbor s názvom „test“, testy prestanú byť volané, pretože make predpokladá, že cieľ bol skonštruovaný a nevyžaduje vykonanie žiadnych akcií (na obídenie problému v make je možné uviesť direktívu „.PHONY: test“). Ciele jasne oddeľuje súbory a mená pravidiel.

    Zamestnanec Red Hat predstavil systém zostavovania Goals. Vydanie GNU Make 4.2
  • Problém s poskytovaním iba jedného parametra pre zostavovacie príkazy.

    Zamestnanec Red Hat predstavil systém zostavovania Goals. Vydanie GNU Make 4.2

    V Ciele sa navrhuje použitie ľubovoľného počtu pomenovaných parametrov. Napríklad, je možné samostatne vyčleniť z názvu znak pre debugovací súbor:

    Zamestnanec Red Hat predstavil systém zostavovania Goals. Vydanie GNU Make 4.2
  • Problémy s interakciou s shellovým interpretom. Napríklad, potreba kontrolovať escapovanie medzier v názvoch súborov a adresárov, plytvanie zdrojmi na spustenie samostatného shellového interpreta pri vykonávaní každého príkazu, dvojité chápanie symbolu „$“ (používa sa ako v shell-i, tak aj v make), zohľadnenie odsadení.

    Uvedené problémy sa v Ciele riešia použitím symbolu „%“ namiesto „$“ pre zostavovacie premenné („$“ zostáva iba pre shell), použitím parsera LALR(1), ktorý vyžaduje obklopovať cesty a názvy súborov úvodzovkami a vyčleniť bloky kódu zloženými zátvorkami. Celý blok sa vykonáva v jednom inštancii príkazového shellu a v rámci bloku je povolené ľubovoľné formátovanie kódu bez viazania na špeciálne medzery.

    Bolo:
    target: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Stalo sa:
    „target“: „foo.o“, „bar.o“ {
    LAGS < -o %@
    }

Ďalšie vlastnosti Goals:

  • Voliteľná podpora zadania ľubovoľných mien a parametrov:

    goal all = : „target“

    goal link =
    „target“ : „foo.o“, „bar.o“ { … }

    goal compile (name) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • Dva režimy spustenia: režim make na priradenie zostavovacích cieľov k názvom súborov (napríklad súbor „foo.o“ zodpovedá cieľu „%name.o“) a režim priameho spustenia kompilácie:

    goal all = : link

    goal link =
    „target“ : „foo.o“, compile („bar“) { … }

    goal compile (name) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • Taktika zostavovania je definovaná špeciálnymi pravidlami, pomocou ktorých je možné určiť potrebu opätovnej zostavy cieľa zostavenia. Ak je viazaná na existenciu súboru, je to jasne definované cez príslušný znak („target“ pre názov pravidla a *file(„target“) 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é znaky zostavovacích taktík. Znak „*file“ je definovaný predvolene (@{…} označuje potlačenie výstupu a „exit 99“ signalizuje potrebu opätovnej zostavy):

    tactic *file (filename) = @{
    test -f %filename || exit 99
    for f in %

    Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster