Red Hat darbinieks iepazīstināja ar Goals montāžas sistēmu. GNU Make 4.2 izlaišana

Richard WM Jones, autors libguestfs, strādājot Red Hat, ieviesa jauna montāžas utilīta Mērķi, kuras mērķis ir novērst trūkumus un problēmas make lietderībā, vienlaikus saglabājot skriptu vispārējo vienkāršību un saprotamību. Make lietderība tika izstrādāta 1976. gadā, un tai ir vairākas konceptuālas nepilnības, kuras plāno novērst šīs nepilnības, nemainot vispārējo koncepciju.
Mērķu pirmkods izplata licencēts saskaņā ar GPLv2+.

Atrisināmas problēmas:

  • Atbalsts tikai vienai atkarību atrisināšanas taktikai - “montāžas instrukcija tiek izpildīta, ja trūkst mērķa faila vai tas ir vecāks par vienu no atkarībām.” Goals plāno ieviest citas taktikas, piemēram, pārbaudīt URL klātbūtni, salīdzināt modifikācijas laikus ar jebkuru failu, novērtēt pakotnes būvējumu. kōji, kontrolsummu salīdzināšana, testa gadījumu palaišana ar selektīvu testu izlaišanu.
  • Apstrādājot būvējuma mērķus, make neatdala failus un kārtulu nosaukumus, un rezultātā netiek pārbaudīts, vai, izpildot kārtulu, fails, par kuru tā apgalvo, ka tiks izveidots, patiešām tiks izveidots. Piemēram, ja jums ir kārtula ar nosaukumu "test", kas palaiž skriptus ar testiem, nejauši tiek izveidots fails ar nosaukumu "test", tad testi vairs netiks izsaukti, jo make uzskatīs, ka mērķis ir izveidots un tas neprasa. jebkura darbība (lai apietu markas problēmu, varat norādīt direktīvu “.PHONY: test”). Mērķi skaidri atdala failus un kārtulu nosaukumus.

    Red Hat darbinieks iepazīstināja ar Goals montāžas sistēmu. GNU Make 4.2 izlaišana

  • Problēma ar tikai viena parametra nodrošināšanu montāžas instrukcijām.

    Red Hat darbinieks iepazīstināja ar Goals montāžas sistēmu. GNU Make 4.2 izlaišana

    Mērķi ļauj izmantot patvaļīgu skaitu nosaukto parametru. Piemēram, jūs varat atsevišķi izvilkt atkļūdošanas faila zīmi no nosaukuma:

    Red Hat darbinieks iepazīstināja ar Goals montāžas sistēmu. GNU Make 4.2 izlaišana

  • Problēmas mijiedarbībā ar čaulas tulku. Piemēram, nepieciešamība kontrolēt atstarpju izspiešanu failu un direktoriju nosaukumos, resursu izšķērdēšana, palaižot atsevišķu čaulas tulku, izpildot katru komandu, dubultā rakstzīmes “$” interpretācija (tiek izmantota gan apvalkā, gan make), ņemot vērā ievilkumus.

    Šīs problēmas tiek atrisinātas programmā Goals, montāžas mainīgajiem izmantojot simbolu “%”, nevis “$” (“$” paliek tikai apvalkam), izmantojot parsētāju. LALR(1), kurā ceļi un failu nosaukumi jāiekļauj pēdiņās un koda bloki jāizceļ ar krokainajām iekavām. Viss komandu bloks tiek palaists vienā komandas čaulas instancē, un blokā ir atļauts patvaļīgs koda formatējums, neatsaucoties uz īpašām atstarpēm.

    Bija:
    Mērķis: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Kļuva:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Citas mērķu funkcijas:

  • Izvēles atbalsts patvaļīgu nosaukumu un parametru norādīšanai:

    mērķis viss = : "mērķis"

    mērķa saite =
    "target" : "foo.o", "bar.o" { ... }

    mērķa apkopojums (nosaukums) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Divi palaišanas režīmi: veidošanas režīms, lai saskaņotu veidošanas mērķus ar failu nosaukumiem (piemēram, fails "foo.o" atbilst mērķim "%name.o"), un tiešās kompilācijas režīms:

    mērķis viss = : saite

    mērķa saite =
    "target" : "foo.o", kompilēt ("bar") { ... }

    mērķa apkopojums (nosaukums) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Montāžas taktiku nosaka īpaši noteikumi, pēc kuriem var noteikt nepieciešamību atkārtoti salikt montāžas mērķi. Ja tiek izveidota saite uz faila klātbūtni, to skaidri nosaka, izmantojot atbilstošo zīmi (noteikuma nosaukumam "mērķis" un faila pārbaudei * fails ("mērķis").

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

    *fails("mērķis") : *fails("foo.o"), *fails("bar.o") { ... }

  • Izstrādātājs var definēt patvaļīgus montāžas taktikas atribūtus. Karogs "*file" ir definēts pēc noklusējuma (@{...} norāda uz izvades nomākšanu, un "exit 99" norāda uz nepieciešamību pēc atjaunošanas):

    taktika *fails (faila nosaukums) = @{
    tests -f % faila nosaukums || izeja 99
    par f %

    Avots: opennet.ru

Pievieno komentāru