Richard Jones (Richard WM Jones), autor , i punon në kompaninë Red Hat, një mjet të ri ndërtimi , që synon të adresojë dobësitë dhe problemet në mjetin make, duke ruajtur thjeshtësinë dhe qartësinë e skenarëve. Mjeti make u projektua në vitin 1976 dhe ka një sërë disfunksionesh konceptuale, të cilat synohet të përmirësohen në Goals pa ndryshuar konceptin e përgjithshëm.
Kodi burimor i Goals në përputhje me licencën GPLv2+.
:
- Mbështetje vetëm për një strategji të vetme të zgjidhjes së varësive — "instruksioni i ndërtimit ekzekutohet nëse skedari qëllim mungon ose është më i vjetër se një prej varësive". Në Goals planifikohet të implementohen edhe strategji të tjera, si verifikimi i pranisë së URL, krahasimi i kohës së modifikimit me çdo skedar, vlerësimi i ndërtimit të paketës në , krahasimi i kontrolleve të shumave, ekzekutimi i grupeve të testeve me kalim të selektivitetit të testeve.
- Gjatë përpunimit të qëllimeve të ndërtimit, mjeti make nuk ndan skedarët dhe emrat e rregullave, dhe si pasojë, nuk ka verifikim se skedari që njoftohet të krijohet me ekzekutimin e rregullës, vërtet krijohet. Për shembull, nëse në prani të një rregullë me emrin "test", e cila ekzekuton skenarët me teste, aksidentalisht krijohet një skedar me emrin "test", atëherë testet do të ndalen së thirruri, pasi make do të mendojë se qëllimi është ndërtuar dhe nuk kërkon të kryejë ndonjë veprim (për të anashkaluar këtë problem në make mund të specifikohet direktiva ".PHONY: test"). Goals ndan qartë skedarët dhe emrat e rregullave.

- Problemi i ofrimit vetëm të një parametri për instruksionet e ndërtimit.

Në Goals propozohet përdorimi i një numri të pakufizuar të parameterëve të emëruar. Për shembull, mund të ndahen veç e veç nga emri një atribut i skedarit të përgatitjes:

- Problemet e ndërveprimit me interpreterin shell. Për shembull, nevoja për të kontrolluar escaping të hapësirave në emrat e skedarëve dhe direktorive, shpenzimi i burimeve për të nisur një interpreter shell të veçantë për çdo komandë, interpretimi i dyfishtë i simbolit "$" (përdoret si në shell ashtu edhe në make), llogaritja e hapësirave.
Problemet e përmendura zgjidhen në Goals duke përdorur simbolin "%" në vend të "$" për variablat e ndërtimit ("$" mbetet vetëm për shell), duke përdorur parserin , që kërkon rrethimin e rrugëve dhe emrave të skedarëve me thonjëza dhe theksimin e blloqeve me kod në përputhje me kllapat. I gjithë blloku ekzekutohet në një instancë të vetme të shell-it, dhe brenda bllokut lejohet formati i çfarëdo lloji të kodit, pa u lidhur me hapësira specifike.
Ishte:
target: foo.o bar.o
${CC} ${CFLAGS} <$ -o $@U bë:
«target»: «foo.o», «bar.o» {
LAGS < -o %@
}
Karakteristika të tjera të Goals:
- Mbështetje opsionale për caktimin e emrave dhe parametrave të rastësishëm:
goal all = : «target»
goal link =
«target» : «foo.o», «bar.o» { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Dy modulet e ekzekutimit: modulet make për përputhjen e qëllimeve të ndërtimit me emrat e skedarëve (p.sh., skedari «foo.o» përputhet me qëllimin «%name.o»), dhe modulet e ekzekutimit të drejtpërdrejtë të kompilimit:
goal all = : link
goal link =
«target» : «foo.o», compile («bar») { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Taktika e ndërtimit përcaktohet nga rregulla të veçanta, me anë të të cilave mund të përcaktohet nevoja për rindërtim të qëllimit të ndërtimit. Nëse lidhet me ekzistencën e një skedari, kjo përcaktohet qartë përmes një karakteristike 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ë karakteristika të rastësishme të taktikave të ndërtimit. Karakteristika «*file» është e përcaktuar si e paracaktuar (@{…} tregon për ndalimin e daljes, dhe «exit 99» sinjalizon nevojën për rindërtim):
tactic *file (filename) = @{
test -f %filename || exit 99
për f në %Burimi: opennet.ru



