A Red Hat egyik alkalmazottja bemutatta a Goals összeállítási rendszerét. A GNU Make 4.2 kiadása

Richard WM Jones, szerző libguestfs, a Red Hatnél dolgozik, benyújtott új építésű segédprogram Célok, amelynek célja a make segédprogram hiányosságainak és problémáinak kiküszöbölése, miközben megőrzi a szkriptek általános egyszerűségét és érthetőségét. A make segédprogramot 1976-ban tervezték, és számos fogalmi hiányossággal rendelkezik; a Goals ezeket a hiányosságokat az általános koncepció megváltoztatása nélkül kívánja megszüntetni.
A célok forráskódja forgalmazza GPLv2+ licenccel.

Problémák megoldódtak:

  • Csak egy függőségi feloldási taktika támogatása – „az összeállítási utasítás akkor fut le, ha a célfájl hiányzik, vagy régebbi, mint az egyik függőség.” A Goals más taktikákat tervez, mint például az URL meglétének ellenőrzése, a módosítási idők összehasonlítása bármely fájllal, a csomag beépítésének kiértékelése kōji, ellenőrző összegek összehasonlítása, tesztesetek futtatása a tesztek szelektív kihagyásával.
  • A build-célok feldolgozása során a make nem választja el a fájlokat és a szabályneveket, és ennek eredményeként nem ellenőrizhető, hogy egy szabály futtatásakor valóban létrejön-e az a fájl, amelyről azt állítja, hogy létrejött. Például, ha van egy "test" nevű szabálya, amely szkripteket futtat tesztekkel, és véletlenül egy "test" nevű fájl jön létre, akkor a tesztek többé nem lesznek meghívva, mivel a make figyelembe veszi, hogy a cél meg van építve, és nem igényel bármilyen műveletet (a make probléma megkerüléséhez megadhatja a „.PHONY: test” direktívát). A Goals kifejezetten elválasztja a fájlokat és a szabályok neveit.

    A Red Hat egyik alkalmazottja bemutatta a Goals összeállítási rendszerét. A GNU Make 4.2 kiadása

  • Probléma, hogy csak egy paramétert ad meg az összeszerelési utasításokhoz.

    A Red Hat egyik alkalmazottja bemutatta a Goals összeállítási rendszerét. A GNU Make 4.2 kiadása

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

    A Red Hat egyik alkalmazottja bemutatta a Goals összeállítási rendszerét. A GNU Make 4.2 kiadása

  • Problémák a shell interpreterrel való interakció során. Például a fájl- és könyvtárnevekben a szóközök kihagyásának szabályozásának szükségessége, az erőforrások pazarlása egy külön shell interpreter elindításához minden egyes parancs végrehajtása során, a „$” karakter kettős értelmezése (a shellben és a make-ban egyaránt), a bemélyedéseket figyelembe véve.

    Ezeket a problémákat a Goals-ban úgy oldják meg, hogy a „%” szimbólumot használjuk a „$” helyett az összeállítási változóknál (a „$” csak a shellnél marad), értelmező használatával LALR(1), amely megköveteli, hogy az elérési utak és fájlneveket idézőjelekkel vegye körül, a kódblokkokat pedig kapcsos kapcsos zárójelekkel jelölje ki. A teljes parancsblokk a parancshéj egy példányában indul el, és a blokkon belül tetszőleges kódformázás megengedett, speciális szóközökre való hivatkozás nélkül.

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

    Lett belőle:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

A Goals egyéb jellemzői:

  • Opcionális támogatás tetszőleges nevek és paraméterek megadásához:

    minden cél = : "cél"

    cél link =
    "cél" : "foo.o", "bar.o" { ... }

    cél összeállítás (név) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Két indítási mód: a készítő mód, hogy az összeállítási célokat fájlnevekkel párosítsa (például a "foo.o" fájl megfelel a "%name.o" célnak), és a közvetlen fordítási mód:

    cél minden = : link

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

    cél összeállítás (név) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Az összeszerelési taktikát speciális szabályok határozzák meg, amelyek alapján megállapítható, hogy szükség van-e egy összeszerelési cél újra összeállítására. Ha hivatkozás történik egy fájl jelenlétére, akkor ezt kifejezetten a megfelelő jel határozza meg („cél” a szabálynévhez és *file („cél”) a fájl ellenőrzéséhez).

    "cél" : "foo.o", "bar.o" { ... }

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

  • A fejlesztő tetszőleges összeállítási taktika attribútumait definiálhatja. A "*file" jelző alapértelmezés szerint van definiálva (a @{...} a kimenet elnyomását jelzi, az "exit 99" pedig az újraépítés szükségességét):

    taktika *fájl (fájlnév) = @{
    teszt -f %fájlnév || kijárat 99
    f esetén %-ban

    Forrás: opennet.ru

Hozzászólás