Richard Jones (Richard WM Jones), autor , që punon në kompaninë Red Hat, një mjet të ri ndërtimi , i fokusuar në eliminimin e defekteve dhe problemeve në mjetin make duke ruajtur thjeshtësinë dhe kuptueshmërinë e skenarëve. Mjeti make u projektua në vitin 1976 dhe ka një numër konceptual të papërsosmërisht, në Goals planifikohet të eliminohen këto papërsosmëri, pa ndryshuar konceptin e përgjithshëm.
Kodi burimor i Goals nën licencën GPLv2+.
:
- Mbështetje për vetëm një taktikë të zgjidhjes së varësive — «udhëzimi i ndërtimit ekzekutohet nëse skedari synues nuk ekziston ose është më i vjetër se një prej varësive». Në Goals është planifikuar të implementohen edhe taktika të tjera, si verifikimi i pranisë së URL-së, krahasimi i kohës së ndryshimit me çdo skedar, vlerësimi i ndërtimit të paketës në , krahasimi i kontrollimeve dhe ekzekutimi i grupeve të testeve me përjashtim të zgjedhur të testeve.
- Kur përpunoni objektivat e ndërtimit, utilitari make nuk ndan skedarët dhe emrat e rregullave, dhe, si pasojë, mungon kontrolli që kur rregulli ekzekutohet, skedari i deklaruar me të vërtetë do të krijohet. Për shembull, nëse, me një rregull me emrin "test", i cili ekzekuton skriptet me teste, aksidentalisht krijohet një skedar me emrin "test", atëherë testet do të ndalojnë së thirruri, pasi make do ta konsiderojë objektivin si të përfunduar dhe nuk do të kërkojë të kryejë ndonjë veprim (për të anashkaluar këtë problem në make, mund të specifikoni direktivën ".PHONY: test"). Goals e ndan qartë skedarët dhe emrat e rregullave.

- Problemi me ofrimin e vetëm një parameteri për udhëzimet e ndërtimit.

Në Goals, sugjerohet përdorimi i një numri të pakufizuar të parametrave të emëruar. Për shembull, mund të ndahen veçmas nga emri karakteristika e skedarit të ndihmës:

- Problemet e ndërveprimit me interpretuesin shell. Për shembull, nevoja për të kontrolluar escaping e hapësirave në emrat e skedarëve dhe direktorëve, shpenzimi i burimeve për të ekzekutuar një interpretues shell të veçantë për çdo komandë, interpretimi i dyfishtë i simbolit "$" (përdoret si në shell, ashtu edhe në make), duke marrë parasysh tërheqjet.
Problemet e caktuara zgjidhen në Goals duke përdorur simbolin «%» në vend të «$» për variablat e ndërtimit («$» mbetet vetëm për shell), duke aplikuar parser-in. , i cili kërkon që rrugët dhe emrat e skedarëve të merren nëpërmjet thonjëzave dhe të dallohen me kapakë me korniza për blloqet e kodit. I gjithë blloku ekzekutohet në një shembull të vetëm të shell-it, dhe brenda bllokut lejohet formatim i rastësishëm i kodit, pa lidhje me hapësirat speciale.
Ishte:
target: foo.o bar.o
${CC} ${CFLAGS} $< -o $@U bë:
«target»: «foo.o», «bar.o» {
%CC %CFLAGS %< -o %@
}
Veçori të tjera të Goals:
- Mbështetje opsionale për caktimin e emrave dhe parametrave të rastit:
goal all = : «target»
goal link =
«target» : «foo.o», «bar.o» { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { %CC %CFLAGS -c $^ -o $@ } - Dy modalitete ekzekutimi: modaliteti make për përputhjen e qëllimeve të ndërtimit me emrat e skedarëve (për shembull, skedari «foo.o» përputhet me qëllimin «%name.o»), dhe modaliteti i drejtpërdrejtë i ekzekutimit të kompilimit:
goal all = : link
goal link =
«target» : «foo.o», compile («bar») { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { %CC %CFLAGS -c $^ -o $@ } - Taktika e ndërtimit përcaktohet nga rregulla të veçanta, me ndihmën e të cilave mund të përcaktohet nevoja për rishikimin e objektit të ndërtimit. Nëse lidhet me praninë e një skedari, kjo përcaktohet në mënyrë të qartë përmes një shenjë përkatëse ("target" për emrin e rregullës dhe *file("target") për verifikimin e skedarit).
«target» : «foo.o», «bar.o» { … }
*file("target"): *file("foo.o"), *file("bar.o") { … }
- Zhvilluesi mund të përcaktojë shenja të rastit për taktikat e ndërtimit. Shenja "*file" është e përcaktuar në mënyrë të paracaktuar (@{…} tregon për shtypjen e output-it, dhe "exit 99" sinjalizon nevojën për rishikim):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %Burimi: opennet.ru



