Richard Jones (Richard WM Jones), autor , töötades Red Hat'is, uus kogumishaldus , mille eesmärk on kõrvaldada puudused ja probleemid make utiliidis, säilitades scriptide üldise lihtsuse ja arusaadavuse. Make utiliit projekteeriti 1976. aastal ja sellel on mitmeid kontseptuaalseid puudusi, mida Goals'is plaanitakse kõrvaldada, mitte muutes üldkonseptsiooni.
Goals'i lähtekood GPLv2+ litsentsi alusel.
:
- Toetatakse vaid ühte sõltuvuste lahendamise taktikat - "kogumisjuhend käivitatakse, kui sihtfail puudub või on vanem kui üks sõltuvus". Goals'is plaanitakse rakendada ka teisi taktikaid, nagu URL-i olemasolu kontrollimine, muutmisaegade võrdlemine mistahes failiga, paketi kogumise hindamine , kontrollsummade võrdlemine, testide täitmise käivitamine valikuliselt testide vahele jätmisega.
- Kogumiste eesmärkide töötlemisel ei erista make utiliit faile ja reeglite nimesid, seetõttu puudub kontroll, kas reegleid käivitades luuakse tõeliselt fail, mille loomist on märgitud. Näiteks, kui „test” nimega reegel, mis käivitab testiskriptid, juhuslikult loob faili nimega „test”, siis testid enam ei käivitata, kuna make arvab, et siht on kogutud ja ei vaja täiendavat toimingute sooritamist (make'is saab probleemi vältimiseks määrata direktiivi „.PHONY: test”). Goals eristab selgelt faile ja reeglite nimesid.

- Probleem, et kogumisinstruktsioonidele antakse ainult üks parameeter.

Goals'is soovitatakse kasutada suvalist arvu nimetatud parameetreid. Näiteks saab eristada nimest silumisefaili tunnust:

- Probleemid suhtlemisel shell-interpretatsiooniga. Näiteks, vajadus kontrollida failide ja kaustade nimede vahepealseid tühikuid, ressursside raiskamine iga käsu täitmise ajal eraldi shell-interpretatsiooni käivitamiseks, sümboli "$" topelt tõlgendamine (kasutatakse nii shell'is kui make'is), sissetõmbe tõlgendamine.
Antud probleemid lahendatakse Goals'is, asendades kogumismuutujate jaoks sümboli "%" sümboliga "$" ("$" jääb ainult shell'i jaoks), rakendades parserit , mis tuleb käsitleda tee ja failinime ümbritsemisel jutumärkides ning koodiblokkide määratlemisel kurvi sümbolitega. Kogu blokk käivitub ühes käsurea eksemplaris ja bloki sees on lubatud vaba koodiformaat, ilma spetsiaalsete vahedega seotuna.
Oli:
target: foo.o bar.o
${CC} ${CFLAGS} $< -o $@On:
«target»: «foo.o», «bar.o» {
LAGS < -o %@
}
Muud Goalsi omadused:
- Valikuline tugi suvaliste nimede ja parameetrite määramiseks:
goal all = : «target»
goal link =
«target» : «foo.o», «bar.o» { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Kaks käivitusrežiimi: make-režiim, et siduda ehitusárodeid failinimedega (näiteks fail «foo.o» vastab eesmärgile «%name.o»), ja otsese kompileerimise režiim:
goal all = : link
goal link =
«target» : «foo.o», compile («bar») { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Ehitusstrateegia määratakse spetsiaalsete reeglite abil, millega saab määrata, kas ehitustulemust tuleks uuesti ehitada. Kui on seotud faili olemasolu, siis määratakse see selgelt vastava tunnuse kaudu («target» reegli nime ja *file(«target») faili kontrollimiseks).
«target» : «foo.o», «bar.o» { … }
*file(«target») : *file(«foo.o»), *file(«bar.o») { … }
- Arendaja saab määrata suvalisi ehitusstrateegiate tunnuseid. Tunnus «*file» on vaikimisi määratletud (@{…} tähistab väljundi summutamist ja «exit 99» annab märku, et ehitamist on vaja uuesti teha):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %Allikas: opennet.ru



