Red Hat darbuotojas pristatė Goals surinkimo sistemą. GNU Make 4.2 išleidimas

Richard WM Jones, autorius libguestfs, dirbantis Red Hat, pristatė nauja surinkimo programa Tikslai, kuriuo siekiama pašalinti make naudingumo trūkumus ir problemas, išlaikant bendrą scenarijų paprastumą ir suprantamumą. „Make“ programa buvo sukurta 1976 m. ir turi nemažai konceptualių trūkumų, kurių tikslas – pašalinti šiuos trūkumus nekeičiant bendros koncepcijos.
Tikslų šaltinio kodas išplatino licencijuota pagal GPLv2+.

Sprendžiamos problemos:

  • Palaikoma tik viena priklausomybės sprendimo taktika – „surinkimo instrukcija vykdoma, jei trūksta tikslinio failo arba jis yra senesnis nei viena iš priklausomybių“. Tikslai planuoja įgyvendinti kitas taktikas, pvz., tikrinti, ar nėra URL, lyginti modifikavimo laiką su bet kokiu failu, įvertinti paketo kūrimą. Koji, kontrolinių sumų palyginimas, testavimo atvejų vykdymas su pasirinktiniu testų praleidimu.
  • Apdorojant kūrimo tikslus, make neatskiria failų ir taisyklių pavadinimų, todėl netikrinama, ar vykdant taisyklę failas, kurį ji teigia esanti, iš tikrųjų bus sukurtas. Pavyzdžiui, jei turite taisyklę pavadinimu „test“, kuri paleidžia scenarijus su testais, netyčia sukuriamas failas pavadinimu „testas“, tada testai nebebus iškviečiami, nes make laikys, kad taikinys yra sukurtas ir nereikalauja. bet koks veiksmas (jei norite išspręsti problemą, galite nurodyti „.PHONY: test“ direktyvą). Tikslai aiškiai atskiria failus ir taisyklių pavadinimus.

    Red Hat darbuotojas pristatė Goals surinkimo sistemą. GNU Make 4.2 išleidimas

  • Problema pateikiant tik vieną surinkimo instrukcijų parametrą.

    Red Hat darbuotojas pristatė Goals surinkimo sistemą. GNU Make 4.2 išleidimas

    Tikslai leidžia naudoti bet kokį pavadintų parametrų skaičių. Pavyzdžiui, galite atskirai išgauti derinimo failo ženklą iš pavadinimo:

    Red Hat darbuotojas pristatė Goals surinkimo sistemą. GNU Make 4.2 išleidimas

  • Problemos bendraujant su apvalkalo interpretatoriumi. Pavyzdžiui, poreikis kontroliuoti tarpų pašalinimą failų ir katalogų pavadinimuose, išteklių švaistymas paleidžiant atskirą apvalkalo interpretatorių vykdant kiekvieną komandą, dvigubas simbolio „$“ interpretavimas (naudojamas ir apvalkale, ir make), atsižvelgiant į įdubas.

    Šios problemos išsprendžiamos programoje „Tikslai“ naudojant „%“ simbolį, o ne „$“ surinkimo kintamiesiems („$“ lieka tik apvalkalui), naudojant analizatorių LALR(1), kuri reikalauja, kad kelius ir failų pavadinimus būtų galima suvesti kabutėmis, o kodo blokus paryškinti riestiniais skliaustais. Visas komandų blokas paleidžiamas viename komandos apvalkalo egzemplioriuje, o bloko viduje leidžiamas savavališkas kodo formatavimas, nenurodant specialių tarpų.

    Tai buvo:
    tikslas: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Kitos tikslų funkcijos:

  • Pasirenkama savavališkų pavadinimų ir parametrų nurodymo palaikymas:

    tikslas visi = : "tikslas"

    tikslo nuoroda =
    "target" : "foo.o", "bar.o" { ... }

    tikslo kompiliuoti (vardas) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Du paleidimo režimai: kūrimo režimas, kad kūrimo tikslai atitiktų failų pavadinimus (pvz., failas „foo.o“ atitinka tikslą „%name.o“), ir tiesioginio kompiliavimo režimas:

    tikslas all = : nuoroda

    tikslo nuoroda =
    "target" : "foo.o", kompiliuoti ("bar") { ... }

    tikslo kompiliuoti (vardas) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Surinkimo taktika nustatoma pagal specialias taisykles, pagal kurias galima nustatyti, ar reikia iš naujo surinkti surinkimo taikinį. Jei pateikiama nuoroda į failo buvimą, tai aiškiai nustatoma per atitinkamą ženklą (taisyklės pavadinimo „taikinys“ ir failo patikrinimui *failas („taikinys“).

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

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

  • Kūrėjas gali apibrėžti savavališkus surinkimo taktikos atributus. „*failo“ vėliavėlė yra apibrėžta pagal numatytuosius nustatymus (@{...} rodo išvesties slopinimą, o „exit 99“ signalizuoja, kad reikia atkurti):

    taktika *failas (failo pavadinimas) = ​​@{
    testas -f %failo pavadinimas || išėjimas 99
    už f %

    Šaltinis: opennet.ru

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