A Red Hat munkatársa bemutatta a Goals építési rendszert. GNU Make 4.2 kiadás

Richard Jones (Richard WM Jones), szerző libguestfs, a Red Hat munkatársa, bemutatott új build eszközként -Dtag=%TAG_FROM_VERSION% scm:tag, amely a make eszköz hibáinak és problémáinak kijavítására irányul, miközben megőrzi a szkriptek általános egyszerűségét és érthetőségét. A make eszközt 1976-ban tervezték meg, és számos koncepcionális hiányossággal rendelkezik, amelyeket a Goals célként kíván orvosolni az alapvető koncepció megváltoztatása nélkül.
A Goals forráskódja terjesztésre kerül GPLv2+ licenc alatt.

A megoldott problémák:

  • Csak egy függőség-megoldási technika támogatása — „a build utasítást akkor indítják el, ha a célfájl hiányzik, vagy régebbi, mint bármelyik függőség”. A Goals tervezi más technikák megvalósítását is, mint például egy URL meglétének ellenőrzése, a fájlok módosítási idejének összehasonlítása bármely fájllal, a csomag build idejének értékelése a Koji, ellenőrző összeg összehasonlítása, a tesztkészletek végrehajtása, szelektív tesztkihagyással.
  • A build célok feldolgozása során a make eszköz nem választja szét a fájlokat és a szabályok neveit, és ennek következtében hiányzik annak ellenőrzése, hogy a szabály végrehajtásának indításakor valóban létrejön-e az a fájl, amelyről kijelentették. Például, ha van egy „test” nevű szabály, amely tesztelők futtatására szolgál, és véletlenül egy „test” nevű fájl jön létre, akkor a tesztek nem fognak lefutni, mivel a make úgy véli, hogy a cél már elkészült és nem igényel további lépéseket (a probléma kikerülésére a make-ben a „.PHONY: test” direktíva megadható). A Goals világosan elválasztja a fájlokat és a szabályok neveit.

    A Red Hat munkatársa bemutatta a Goals építési rendszert. GNU Make 4.2 kiadás
  • A build utasításokhoz csak egy paraméter megadásának problémája.

    A Red Hat munkatársa bemutatta a Goals építési rendszert. GNU Make 4.2 kiadás

    A Goals lehetővé teszi tetszőleges számú név szerinti paraméter használatát. Például külön kiemelheti a névből a hibakeresési fájl jelét:

    A Red Hat munkatársa bemutatta a Goals építési rendszert. GNU Make 4.2 kiadás
  • A shell-értelmezővel való interakció problémái. Például, szükséges az üres helyek kódolásának ellenőrzése a fájlok és könyvtárak neveiben, erőforrások felhasználása minden parancs végrehajtásakor egy külön shell-értelmező indítására, a „$” karakter kettős értelmezésének figyelembevétele (a shell-ben és a make-ben is használják), a behúzások figyelembevétele.

    A megadott problémák a Goals-ban a „%” jel használatával oldódnak meg a build változókhoz („$” csak a shell esetében marad), a parszert alkalmazva LALR(1), amely megköveteli, hogy az útvonalakat és a fájlneveket idézőjelek közé zárjuk, és a kódblokkokat kapcsos zárójelek közé helyezzük. Az egész blokk egy példányban fut el a parancssorban, és a blokkban tetszőleges kódformázás engedélyezett, különleges szóközök nélkül.

    Régebben:
    cél: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Most:
    «cél»: «foo.o», «bar.o» {
    LAGS < -o %@
    }

A Goals egyéb jellemzői:

  • Opcionális támogatás véletlenszerű nevekből és paraméterekből:

    cél all = : «cél»

    cél link =
    «cél» : «foo.o», «bar.o» { … }

    cél fordítás (név) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • Két indítási mód: make üzemmód a build-célok és fájlnevek összepárosításához (például a «foo.o» fájl megfelel a «%name.o» célnak), és közvetlen fordítási üzemmód:

    cél all = : link

    cél link =
    «cél» : «foo.o», fordítás («bar») { … }

    cél fordítás (név) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • A build taktikát speciális szabályok határozzák meg, amelyeken keresztül meghatározható a build cél újrafordításának szükségessége. Ha a fájl meglétéhez kötődünk, azt egyértelműen meg kell határozni a megfelelő jelzőn keresztül («cél» a szabály neve és *file(«cél») a fájl ellenőrzéséhez).

    «cél» : «foo.o», «bar.o» { … }

    *file(«cél») : *file(«foo.o»), *file(«bar.o») { … }

  • A fejlesztő véletlenszerű build taktikákat definiálhat. A «*file» jelző alapértelmezés szerint definiált (@{…} a kimenet elnyomására utal, míg az «exit 99» jelez egy újrafordítási szükségletet):

    taktika *file (fájlnév) = @{
    test -f %filename || exit 99
    for f in %

    Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster