Richard Jones (Richard WM Jones), autor , koji radi za Red Hat, novi alat za izgradnju , usmjeren na rješavanje nedostataka i problema u alatu make uz očuvanje opće jednostavnosti i razumljivosti skripti. Alat make dizajniran je 1976. godine i ima niz konceptualnih nedostataka, a u Goals se planira riješiti tih nedostataka bez promjene opće koncepcije.
Izvorni kod Goals pod GPLv2+ licencom.
:
- Podrška samo za jednu taktiku rješavanja zavisnosti — "izgradnja se pokreće ako ciljna datoteka nedostaje ili je starija od jedne od zavisnosti". U Goals se planira implementirati i druge taktike, kao što su provjera postojanja URL-a, usporedba vremena izmjene s bilo kojom datotekom, procjena izgradnje paketa u , usporedba kontrolnih zbrojeva, pokretanje testnih skupova s odabranim preskočenim testovima.
- Prilikom obrade ciljeva izgradnje, alat make ne odvaja datoteke i nazive pravila, što rezultira time da ne postoji provjera da li će se prilikom pokretanja pravila zaista stvoriti datoteka koja je deklarirana. Na primjer, ako je uz prisutno pravilo s imenom "test", koje pokreće skripte s testovima, slučajno stvorena datoteka s imenom "test", tada se testovi neće pozivati jer make smatra da je cilj izgrađen i ne zahtijeva izvođenje bilo kakvih radnji (da bi se zaobišao problem u make, može se navesti direktiva ".PHONY: test"). Goals jasno odvaja datoteke i nazive pravila.

- Problem sa davanjem samo jednog parametra za upute za izgradnju.

U Goals se predlaže korištenje proizvoljnog broja imenovanih parametara. Na primjer, može se odvojeno izdvojiti iz imena oznaku datoteke za ispravak:

- Problemi interakcije s shell interpretatorom. Na primjer, potreba za kontrolom escape-a razmaka u imenima datoteka i direktorija, troškovi resursa pri pokretanju zasebnog shell interpretatora prilikom izvršenja svake naredbe, dvostruka interpretacija znaka "$" (koristi se i u shell-u i u make-u), računanje uvučenja.
Navedeni problemi rješavaju se u Goals korištenjem znaka "%" umjesto "$" za varijable izgradnje ("$" ostaje samo za shell), primjenom parsera , ki zahteva, da se poti in imena datotek obravnavajo v narekovajih in da se bloke kode izpostavijo v oklepajih. Celoten blok se izvede v enem samem zagonu ukazne lupine, znotraj bloka pa je dovoljeno poljubno oblikovanje kode, brez vezav na posebne praznine.
Bilo je:
target: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Postalo je:
«target»: «foo.o», «bar.o» {
LAGS <-o %@
}
Druge značilnosti Goals:
- Neobvezna podpora za dodelitev poljubnih imen in parametrov:
goal all = : «target»
goal link =
«target» : «foo.o», «bar.o» { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Dva načina za zagon: način make za usklajevanje gradbenih ciljev z imeni datotek (na primer, datoteka «foo.o» ustreza cilju «%name.o»), in način neposrednega izvajanja prevajanja:
goal all = : link
goal link =
«target» : «foo.o», compile («bar») { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Taktika gradnje določajo posebna pravila, s katerimi lahko določimo potrebo po ponovnem gradnji gradbenega cilja. Če je vezano na prisotnost datoteke, je to jasno določeno z ustreznim znakom («target» za ime pravila in *file(«target») za preverjanje datoteke).
«target» : «foo.o», «bar.o» { … }
*file(«target») : *file(«foo.o»), *file(«bar.o») { … }
- Razvijalec lahko določi poljubne znake gradbenih taktik. Znak «*file» je določen privzeto (@{…} označuje zatiranje izhoda, medtem ko «exit 99» signalizira potrebo po ponovnem gradnji):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %Izvor: opennet.ru



