Zaměstnanec Red Hatu představil montážní systém Goals. Vydání GNU Make 4.2

Richard WM Jones, autor libguestfs, pracující ve společnosti Red Hat, představen nová montážní utilita Cíle, zaměřené na odstranění nedostatků a problémů v užitku make při zachování celkové jednoduchosti a srozumitelnosti skriptů. Nástroj Make byl navržen v roce 1976 a má řadu koncepčních nedostatků, Goals plánuje tyto nedostatky odstranit beze změny obecné koncepce.
Zdrojový kód cílů distribuovány pod licencí GPLv2+.

Řešené problémy:

  • Podpora pouze jedné taktiky řešení závislostí – „instrukce sestavení se spustí, pokud cílový soubor chybí nebo je starší než jedna ze závislostí“. Cíle plánuje implementovat další taktiky, jako je kontrola přítomnosti adresy URL, porovnávání časů úprav s libovolným souborem, vyhodnocování vestavěného balíčku kōji, porovnání kontrolních součtů, spouštění testovacích případů se selektivním přeskakováním testů.
  • Při zpracování cílů sestavení make neodděluje soubory a názvy pravidel a v důsledku toho neexistuje žádná kontrola, zda při spuštění pravidla bude soubor, o kterém tvrdí, že byl vytvořen, skutečně vytvořen. Pokud máte například pravidlo nazvané „test“, které spouští skripty s testy, náhodně se vytvoří soubor s názvem „test“, pak se testy přestanou volat, protože make bude mít za to, že cíl je sestaven a nevyžaduje žádné action (pro Chcete-li vyřešit problém v make, můžete zadat direktivu „.PHONY: test“). Cíle explicitně oddělují soubory a názvy pravidel.

    Zaměstnanec Red Hatu představil montážní systém Goals. Vydání GNU Make 4.2

  • Problém s uvedením pouze jednoho parametru pro montážní návod.

    Zaměstnanec Red Hatu představil montážní systém Goals. Vydání GNU Make 4.2

    Cíle vám umožňují používat libovolný počet pojmenovaných parametrů. Například můžete samostatně extrahovat znak ladicího souboru z názvu:

    Zaměstnanec Red Hatu představil montážní systém Goals. Vydání GNU Make 4.2

  • Problémy při interakci s interpretem shellu. Například nutnost kontrolovat únik mezer v názvech souborů a adresářů, plýtvání zdroji při spouštění samostatného interpretu shellu při provádění každého příkazu, dvojí interpretaci znaku „$“ (používá se v shellu i make), s přihlédnutím k prolisům.

    Tyto problémy jsou v Goals vyřešeny použitím symbolu „%“ místo „$“ pro proměnné sestavy („$“ zůstane pouze pro shell) pomocí analyzátoru LALR(1), který vyžaduje, abyste cesty a názvy souborů obklopili uvozovkami a zvýraznili bloky kódu složenými závorkami. Celý příkazový blok je spuštěn v jedné instanci příkazového shellu a v rámci bloku je povoleno libovolné formátování kódu bez odkazu na speciální mezery.

    Bylo to:
    cíl: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Další vlastnosti cílů:

  • Volitelná podpora pro zadávání libovolných jmen a parametrů:

    cíl vše =: "cíl"

    odkaz na cíl =
    "target" : "foo.o", "bar.o" { ... }

    cíl kompilace (jméno) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Dva režimy spouštění: režim make, který odpovídá cílům sestavení s názvy souborů (např. soubor „foo.o“ odpovídá cíli „%name.o“), a režim přímé kompilace:

    cíl vše = : odkaz

    odkaz na cíl =
    "target" : "foo.o", kompilace ("bar") { ... }

    cíl kompilace (jméno) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktika sestavování je určena speciálními pravidly, která lze použít k určení potřeby opětovného sestavení cíle sestavy. Pokud je vytvořen odkaz na přítomnost souboru, je to výslovně určeno pomocí odpovídajícího znaku („cíl“ pro název pravidla a *soubor („cíl“) pro kontrolu souboru).

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

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

  • Vývojář může definovat libovolné atributy sestavovací taktiky. Ve výchozím nastavení je definován příznak "*file" (@{...} označuje potlačení výstupu a "exit 99" signalizuje potřebu přebudování):

    taktika *soubor (název souboru) = @{
    test -f %název souboru || výjezd 99
    pro f v %

    Zdroj: opennet.ru

Přidat komentář