Richard WM Jones, autor pracujúci v spoločnosti Red Hat, nový nástroj na zostavenie , ktorého cieľom bolo odstrániť nedostatky a problémy utility make a zároveň zachovať celkovú jednoduchosť a prehľadnosť skriptov. Utilita make bola navrhnutá v roku 1976 a má množstvo koncepčných nedostatkov. Cieľom Goals je tieto nedostatky riešiť bez zmeny celkovej koncepcie.
Zdrojový kód cieľov pod licenciou GPLv2+.
:
- Podpora iba jednej taktiky riešenia závislostí – „inštrukcia zostavenia sa spustí, ak cieľový súbor chýba alebo je starší ako jedna zo závislostí.“ Goals plánuje implementovať aj ďalšie taktiky, ako je kontrola prítomnosti URL adresy, porovnávanie časov modifikácie s ľubovoľným súborom a vyhodnotenie zostavenia balíka. , porovnávanie kontrolných súčtov, spúšťanie testovacích sád so selektívnym preskakovaním testov.
- Pri spracovaní cieľov zostavenia nástroj make nerozlišuje medzi súbormi a názvami pravidiel, a preto neexistuje žiadna kontrola, ktorá by zabezpečila, že súbor, ktorý údajne vytvára, bude skutočne vytvorený pri spustení pravidla. Napríklad, ak pravidlo s názvom „test“ spustí testovacie skripty a súbor s názvom „test“ sa náhodne vytvorí, testy sa prestanú volať, pretože nástroj make bude predpokladať, že cieľ bol zostavený a nevyžaduje žiadne akcie. (Ak chcete tento problém obísť, môžete v nástroji make zadať direktívu „.PHONY:test“.) Nástroj Goals explicitne rozlišuje medzi súbormi a názvami pravidiel.

- Problém s poskytnutím iba jedného parametra pre montážne pokyny.

Goals umožňuje použitie ľubovoľného počtu pomenovaných parametrov. Napríklad môžete samostatne extrahovať príznak ladiacieho súboru z názvu:

- Problémy s interakciou s interpretom shellu. Napríklad potreba ovládať únik medzier v názvoch súborov a adresárov, réžia zdrojov pri spúšťaní samostatného interpreta shellu pre každý príkaz, duálna interpretácia symbolu „$“ (používaného v shelli aj v make) a odsadenie.
Uvedené problémy sú v Goals riešené použitím symbolu „%“ namiesto „$“ pre assemblerové premenné („$“ zostáva iba pre shell), použitím parsera , čo vyžaduje uvádzanie ciest a názvov súborov v úvodzovkách a oddeľovanie blokov kódu zloženými zátvorkami. Celý blok príkazu sa spúšťa v jednej inštancii príkazového shellu a v rámci bloku je povolené ľubovoľné formátovanie kódu bez obmedzenia špeciálnymi medzerami.
To bolo:
cieľ: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Sa stal:
"cieľ": "foo.o", "bar.o" {
%CC %CFLAGS %< -o %@
}
Ďalšie funkcie Cieľov:
- Voliteľná podpora pre zadávanie vlastných názvov a parametrov:
cieľ všetko = : "cieľ"
odkaz na cieľ =
"cieľ" : "foo.o", "bar.o" { ... }cieľ kompilácie (názov) =
"%name.o" : "%name.c", "závislosť.h" { %CC %CFLAGS -c $^ -o $@ } - Dva režimy spustenia: režim vytvárania pre porovnávanie cieľov zostavenia s názvami súborov (napr. súbor „foo.o“ sa zhoduje s cieľom „%name.o“) a režim priamej kompilácie:
cieľ všetko = : odkaz
odkaz na cieľ =
"cieľ" : "foo.o", kompilácia ("bar") { ... }cieľ kompilácie (názov) =
"%name.o" : "%name.c", "závislosť.h" { %CC %CFLAGS -c $^ -o $@ } - Taktiky zostavovania sú definované špeciálnymi pravidlami, ktoré možno použiť na určenie, či je potrebné cieľ zostavovania znovu zostaviť. Ak je vyžadovaná prítomnosť súboru, je to explicitne špecifikované pomocou príslušného príznaku („target“ pre názov pravidla a *file(„target“) pre kontrolu súborov).
"cieľ" : "foo.o", "bar.o" { ... }
*súbor("cieľ") : *súbor("foo.o"), *súbor("bar.o") { ... }
- Vývojár si môže definovať vlastné príznaky stratégie zostavovania. Príznak „*file“ je definovaný štandardne (@{…} označuje potlačenie výstupu a „exit 99“ signalizuje potrebu prestavby):
taktika *súbor (názov súboru) = @{
test -f %názovsúboru || ukončenie 99
pre f v %Zdroj: opennet.ru



