ProHoster > Blog > internetes hírek > A Red Hat egyik alkalmazottja bemutatta a Goals összeállítási rendszerét. A GNU Make 4.2 kiadása
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.
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.
Probléma, hogy csak egy paramétert ad meg az összeszerelési utasításokhoz.
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:
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 $@
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") { ... }
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).
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