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



