Richard Jones (Richard WM Jones), forfatter , der arbejder for Red Hat, et nyt byggeværktøj , der har til formål at rette mangler og problemer i make-værktøjet, samtidig med at overordnet enkelhed og forståelighed i scripts bevares. Make-værktøjet blev designet i 1976 og har en række konceptuelle mangler, som skal udrettes i Goals, uden at ændre den overordnede idé.
Kildekoden til Goals under GPLv2+ licensen.
:
- Understøttelse af kun én strategi for at håndtere afhængigheder — „byggeinstruktionen køres, hvis målfilen ikke findes, eller hvis den er ældre end en af afhængighederne“. I Goals planlægges det at implementere andre strategier, såsom at tjekke for URL'er, sammenligne ændringstidspunktet med enhver fil, evaluere pakken i , sammenligne kontrolsummer, køre testpakker med selektiv udeladelse af tests.
- Når man behandler byggeopgaver, skelner make-værktøjet ikke mellem filer og reglenavne, hvilket medfører, at der ikke er nogen kontrol for, om reglen faktisk vil skabe en fil, der er angivet. For eksempel, hvis der er en regel med navnet „test“, der kører scripts med tests, og der ved et uheld oprettes en fil med navnet „test“, vil testene stoppe med at blive kaldt, da make vil antage, at målet er bygget og ikke kræver nogen handlinger (for at omgå problemet i make kan man angive direktivet „.PHONY: test“). Goals skelner tydeligt mellem filer og reglenavne.

- Problemet med at give kun én parameter til byggeinstruktioner.

I Goals foreslås det at bruge et vilkårligt antal navngivne parametre. For eksempel kan man særskilt udtrække navnet som indikator for en debug-fil:

- Problemer med interaktionen med shell-tolk. For eksempel nødvendigheden af at styre escape-tegn for mellemrum i fil- og mappenavne, ressourceforbruget ved at starte en separat shell-tolk ved udførelse af hver kommando, dobbelt fortolkning af tegnet „$“ (bruges både i shell og i make), og hensyntagen til indryk.
De nævnte problemer løses i Goals ved at bruge tegnet „%“ i stedet for „$“ for byggevariablerne („$“ forbliver kun for shell), anvendelse af parseren , der kræver at indramme stier og filnavne i citationstegn og indramme kodeblokke med krøllede parenteser. Hele blokken kører i et enkelt instans af kommandoskallen, og inden for blokken er vilkårlig kodeformatering tilladt, uden binding til specielle mellemrum.
Tidligere:
target: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Er blevet:
«target»: «foo.o», «bar.o» {
LAGS < -o %@
}
Andre funktioner af Goals:
- Valgfri understøttelse af at angive vilkårlige navne og parametre:
goal all = : «target»
goal link =
«target» : «foo.o», «bar.o» { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - To kørselsindstillinger: make-tilstand for at matche byggetargets med filnavne (for eksempel filen «foo.o» svarer til målet «%name.o»), og direkte kompilationskørsel:
goal all = : link
goal link =
«target» : «foo.o», compile («bar») { … }goal compile (name) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Byggetaktik bestemmes af særlige regler, som kan bestemme behovet for at genopbygge byggetargeten. Hvis der er knyttet en fil, defineres dette eksplicit gennem den tilsvarende indikator («target» for reglenavn og *file(«target») til filcheck).
«target» : «foo.o», «bar.o» { … }
*file(«target») : *file(«foo.o»), *file(«bar.o») { … }
- Udvikleren kan definere vilkårlige indikatorer for byggetaktikker. Indikatoren «*file» er defineret som standard (@{…} angiver undertrykkelse af output, og «exit 99» indikerer behovet for genopbygning):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %Kilde: opennet.ru



