A Red Hat employee presented the build system Goals. Release of GNU Make 4.2

Richard Jones (Richard WM Jones), autor libguestfs, zaposlen u tvrtki Red Hat, predstavio nova alatka za sastavljanje Ciljevi, usmjerena na rješavanje nedostataka i problema u make alatu, dok zadržava opću jednostavnost i razumljivost skripti. Alat make je dizajniran 1976. godine i ima nekoliko konceptualnih nedostataka, a u Ciljevima se planira ukloniti te nedostatke, bez promjene opće koncepcije.
Izvorni kod Ciljeva distribuira se pod GPLv2+ licencom.

Problemi koji se rješavaju:

  • Podrška samo jednoj taktici rješavanja zavisnosti — 'alat za sastavljanje se pokreće ako ciljni datoteka ne postoji, ili je starija od neke od zavisnosti'. U Ciljevima se planira implementirati i druge taktike, poput provjere postojanja URL-a, usporedbe vremena izmjene s bilo kojom datotekom, procjene izrade paketa u Koji, usporedbe kontrolnih zbrojeva, pokretanja testnih setova s povremenim propuštanjem testova.
  • Pri obradi ciljeva izrade alat make ne razdvaja datoteke i imena pravila, i kao rezultat toga, nedostaje provjera da li će se prilikom pokretanja pravila zaista stvoriti datoteka koja je najavljena. Na primjer, ako postoji pravilo s imenom 'test', koje pokreće skripte s testovima, a slučajno se stvori datoteka s imenom 'test', testovi će prestati biti pozivani, jer će make smatrati da je cilj sastavljen i da ne zahtijeva izvršavanje bilo kakvih akcija (da bi se izbjegao problem u make-u može se navesti direktiva '.PHONY: test'). Ciljevi jasno razdvajaju datoteke i imena pravila.

    A Red Hat employee presented the build system Goals. Release of GNU Make 4.2
  • Problem s davanjem samo jednog parametra za upute za sastavljanje.

    A Red Hat employee presented the build system Goals. Release of GNU Make 4.2

    U Ciljevima se predlaže korištenje proizvoljnog broja imenovanih parametara. Na primjer, može se posebno istaknuti iz naziva oznaka za datoteku za ispravljanje pogrešaka:

    A Red Hat employee presented the build system Goals. Release of GNU Make 4.2
  • Problemi s interakcijom s shell tumačem. Na primjer, potreba za kontrolom escapiranja razmaka u imenima datoteka i direktorija, trošenje resursa na pokretanje zasebnog shell tumača za svaku naredbu, dvostruko tumačenje simbola '$' (koristi se i u shell-u i u make-u), uzimanje u obzir uvlačenja.

    Navedeni problemi rješavaju se u Ciljevima korištenjem simbola '%' umjesto '$' za varijable sastavljanja ('$' ostaje samo za shell), primjenom parsera LALR(1), koji zahtijeva stavljanje putanja i imena datoteka u navodnike i označavanje blokova s kodom s vitičastim zagradama. Cijeli blok se pokreće u jednoj instanci ljuske, a unutar bloka dopušteno je proizvoljno formatiranje koda, bez obzira na posebne razmake.

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

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

Ostale značajke ciljeva:

  • Opcionalna podrška za postavljanje proizvoljnih imena i parametara:

    cilj svi = : «cilj»

    cilj povezivanje =
    «cilj»: «foo.o», «bar.o» { … }

    cilj kompajlirati (ime) =
    «%ime.o» : «%ime.c», «dep.h» { LAGS -c $^ -o $@ }

  • Dva načina izvođenja: način make za usklađivanje ciljeva s imenima datoteka (npr. datoteka «foo.o» odgovara cilju «%ime.o»), i način izravnog pokretanja kompajlacije:

    cilj svi = : poveži

    cilj povezivanje =
    «cilj»: «foo.o», kompajliraj («bar») { … }

    cilj kompajlirati (ime) =
    «%ime.o» : «%ime.c», «dep.h» { LAGS -c $^ -o $@ }

  • Taktika izgradnje određena je posebnim pravilima, uz pomoć kojih se može odrediti potreba za ponovnom izgradnjom cilja. Ako je vezano za prisutnost datoteke, to se izričito određuje kroz odgovarajući znak («cilj» za ime pravila i *file(«cilj») za provjeru datoteke).

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

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

  • Programer može definirati proizvoljne oznake za izgrađene taktike. Oznaka «*file» je definirana po defaultu (@{…} označava isključenje ispisa, a «exit 99» signalizira potrebu za ponovnom izgradnjom):

    taktika *file (naziv_datoteke) = @{
    test -f %naziv_datoteke || exit 99
    za f u %

    Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster