Red Hat'i töötaja esitles Goals kogumisüsteemi. GNU Make 4.2 väljaanne

Richard Jones (Richard WM Jones), autor libguestfs, töötades Red Hat'is, esitles uus kogumishaldus Goals, mille eesmärk on kõrvaldada puudused ja probleemid make utiliidis, säilitades scriptide üldise lihtsuse ja arusaadavuse. Make utiliit projekteeriti 1976. aastal ja sellel on mitmeid kontseptuaalseid puudusi, mida Goals'is plaanitakse kõrvaldada, mitte muutes üldkonseptsiooni.
Goals'i lähtekood levitatakse GPLv2+ litsentsi alusel.

Probleemid, mida lahendatakse:

  • Toetatakse vaid ühte sõltuvuste lahendamise taktikat - "kogumisjuhend käivitatakse, kui sihtfail puudub või on vanem kui üks sõltuvus". Goals'is plaanitakse rakendada ka teisi taktikaid, nagu URL-i olemasolu kontrollimine, muutmisaegade võrdlemine mistahes failiga, paketi kogumise hindamine Koji, kontrollsummade võrdlemine, testide täitmise käivitamine valikuliselt testide vahele jätmisega.
  • Kogumiste eesmärkide töötlemisel ei erista make utiliit faile ja reeglite nimesid, seetõttu puudub kontroll, kas reegleid käivitades luuakse tõeliselt fail, mille loomist on märgitud. Näiteks, kui „test” nimega reegel, mis käivitab testiskriptid, juhuslikult loob faili nimega „test”, siis testid enam ei käivitata, kuna make arvab, et siht on kogutud ja ei vaja täiendavat toimingute sooritamist (make'is saab probleemi vältimiseks määrata direktiivi „.PHONY: test”). Goals eristab selgelt faile ja reeglite nimesid.

    Red Hat'i töötaja esitles Goals kogumisüsteemi. GNU Make 4.2 väljaanne
  • Probleem, et kogumisinstruktsioonidele antakse ainult üks parameeter.

    Red Hat'i töötaja esitles Goals kogumisüsteemi. GNU Make 4.2 väljaanne

    Goals'is soovitatakse kasutada suvalist arvu nimetatud parameetreid. Näiteks saab eristada nimest silumisefaili tunnust:

    Red Hat'i töötaja esitles Goals kogumisüsteemi. GNU Make 4.2 väljaanne
  • Probleemid suhtlemisel shell-interpretatsiooniga. Näiteks, vajadus kontrollida failide ja kaustade nimede vahepealseid tühikuid, ressursside raiskamine iga käsu täitmise ajal eraldi shell-interpretatsiooni käivitamiseks, sümboli "$" topelt tõlgendamine (kasutatakse nii shell'is kui make'is), sissetõmbe tõlgendamine.

    Antud probleemid lahendatakse Goals'is, asendades kogumismuutujate jaoks sümboli "%" sümboliga "$" ("$" jääb ainult shell'i jaoks), rakendades parserit LALR(1), mis tuleb käsitleda tee ja failinime ümbritsemisel jutumärkides ning koodiblokkide määratlemisel kurvi sümbolitega. Kogu blokk käivitub ühes käsurea eksemplaris ja bloki sees on lubatud vaba koodiformaat, ilma spetsiaalsete vahedega seotuna.

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

    On:
    «target»: «foo.o», «bar.o» {
    LAGS < -o %@
    }

Muud Goalsi omadused:

  • Valikuline tugi suvaliste nimede ja parameetrite määramiseks:

    goal all = : «target»

    goal link =
    «target» : «foo.o», «bar.o» { … }

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

  • Kaks käivitusrežiimi: make-režiim, et siduda ehitusárodeid failinimedega (näiteks fail «foo.o» vastab eesmärgile «%name.o»), ja otsese kompileerimise režiim:

    goal all = : link

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

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

  • Ehitusstrateegia määratakse spetsiaalsete reeglite abil, millega saab määrata, kas ehitustulemust tuleks uuesti ehitada. Kui on seotud faili olemasolu, siis määratakse see selgelt vastava tunnuse kaudu («target» reegli nime ja *file(«target») faili kontrollimiseks).

    «target» : «foo.o», «bar.o» { … }

    *file(«target») : *file(«foo.o»), *file(«bar.o») { … }

  • Arendaja saab määrata suvalisi ehitusstrateegiate tunnuseid. Tunnus «*file» on vaikimisi määratletud (@{…} tähistab väljundi summutamist ja «exit 99» annab märku, et ehitamist on vaja uuesti teha):

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

    Allikas: opennet.ru

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster