Zaposlenik Red Hata predstavio je sustav za izgradnju Goals. Izdanje GNU Make 4.2

Richard Jones (Richard WM Jones), autor libguestfs, koji radi za Red Hat, представил novi alat za izgradnju Goals, usmjeren na rješavanje nedostataka i problema u alatu make uz očuvanje opće jednostavnosti i razumljivosti skripti. Alat make dizajniran je 1976. godine i ima niz konceptualnih nedostataka, a u Goals se planira riješiti tih nedostataka bez promjene opće koncepcije.
Izvorni kod Goals se distribuira pod GPLv2+ licencom.

Problemi koji se rješavaju:

  • Podrška samo za jednu taktiku rješavanja zavisnosti — "izgradnja se pokreće ako ciljna datoteka nedostaje ili je starija od jedne od zavisnosti". U Goals se planira implementirati i druge taktike, kao što su provjera postojanja URL-a, usporedba vremena izmjene s bilo kojom datotekom, procjena izgradnje paketa u Koji, usporedba kontrolnih zbrojeva, pokretanje testnih skupova s odabranim preskočenim testovima.
  • Prilikom obrade ciljeva izgradnje, alat make ne odvaja datoteke i nazive pravila, što rezultira time da ne postoji provjera da li će se prilikom pokretanja pravila zaista stvoriti datoteka koja je deklarirana. Na primjer, ako je uz prisutno pravilo s imenom "test", koje pokreće skripte s testovima, slučajno stvorena datoteka s imenom "test", tada se testovi neće pozivati jer make smatra da je cilj izgrađen i ne zahtijeva izvođenje bilo kakvih radnji (da bi se zaobišao problem u make, može se navesti direktiva ".PHONY: test"). Goals jasno odvaja datoteke i nazive pravila.

    Zaposlenik Red Hata predstavio je sustav za izgradnju Goals. Izdanje GNU Make 4.2
  • Problem sa davanjem samo jednog parametra za upute za izgradnju.

    Zaposlenik Red Hata predstavio je sustav za izgradnju Goals. Izdanje GNU Make 4.2

    U Goals se predlaže korištenje proizvoljnog broja imenovanih parametara. Na primjer, može se odvojeno izdvojiti iz imena oznaku datoteke za ispravak:

    Zaposlenik Red Hata predstavio je sustav za izgradnju Goals. Izdanje GNU Make 4.2
  • Problemi interakcije s shell interpretatorom. Na primjer, potreba za kontrolom escape-a razmaka u imenima datoteka i direktorija, troškovi resursa pri pokretanju zasebnog shell interpretatora prilikom izvršenja svake naredbe, dvostruka interpretacija znaka "$" (koristi se i u shell-u i u make-u), računanje uvučenja.

    Navedeni problemi rješavaju se u Goals korištenjem znaka "%" umjesto "$" za varijable izgradnje ("$" ostaje samo za shell), primjenom parsera LALR(1), ki zahteva, da se poti in imena datotek obravnavajo v narekovajih in da se bloke kode izpostavijo v oklepajih. Celoten blok se izvede v enem samem zagonu ukazne lupine, znotraj bloka pa je dovoljeno poljubno oblikovanje kode, brez vezav na posebne praznine.

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

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

Druge značilnosti Goals:

  • Neobvezna podpora za dodelitev poljubnih imen in parametrov:

    goal all = : «target»

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

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

  • Dva načina za zagon: način make za usklajevanje gradbenih ciljev z imeni datotek (na primer, datoteka «foo.o» ustreza cilju «%name.o»), in način neposrednega izvajanja prevajanja:

    goal all = : link

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

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

  • Taktika gradnje določajo posebna pravila, s katerimi lahko določimo potrebo po ponovnem gradnji gradbenega cilja. Če je vezano na prisotnost datoteke, je to jasno določeno z ustreznim znakom («target» za ime pravila in *file(«target») za preverjanje datoteke).

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

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

  • Razvijalec lahko določi poljubne znake gradbenih taktik. Znak «*file» je določen privzeto (@{…} označuje zatiranje izhoda, medtem ko «exit 99» signalizira potrebo po ponovnem gradnji):

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

    Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster