Zaměstnanec Red Hatu představil montážní systém Goals. Vydání GNU Make 4.2
Richard WM Jones, autor libguestfs, pracující ve společnosti Red Hat, představen nová montážní utilita Cíle, zaměřené na odstranění nedostatků a problémů v užitku make při zachování celkové jednoduchosti a srozumitelnosti skriptů. Nástroj Make byl navržen v roce 1976 a má řadu koncepčních nedostatků, Goals plánuje tyto nedostatky odstranit beze změny obecné koncepce.
Zdrojový kód cílů distribuovány pod licencí GPLv2+.
Podpora pouze jedné taktiky řešení závislostí – „instrukce sestavení se spustí, pokud cílový soubor chybí nebo je starší než jedna ze závislostí“. Cíle plánuje implementovat další taktiky, jako je kontrola přítomnosti adresy URL, porovnávání časů úprav s libovolným souborem, vyhodnocování vestavěného balíčku kōji, porovnání kontrolních součtů, spouštění testovacích případů se selektivním přeskakováním testů.
Při zpracování cílů sestavení make neodděluje soubory a názvy pravidel a v důsledku toho neexistuje žádná kontrola, zda při spuštění pravidla bude soubor, o kterém tvrdí, že byl vytvořen, skutečně vytvořen. Pokud máte například pravidlo nazvané „test“, které spouští skripty s testy, náhodně se vytvoří soubor s názvem „test“, pak se testy přestanou volat, protože make bude mít za to, že cíl je sestaven a nevyžaduje žádné action (pro Chcete-li vyřešit problém v make, můžete zadat direktivu „.PHONY: test“). Cíle explicitně oddělují soubory a názvy pravidel.
Problém s uvedením pouze jednoho parametru pro montážní návod.
Cíle vám umožňují používat libovolný počet pojmenovaných parametrů. Například můžete samostatně extrahovat znak ladicího souboru z názvu:
Problémy při interakci s interpretem shellu. Například nutnost kontrolovat únik mezer v názvech souborů a adresářů, plýtvání zdroji při spouštění samostatného interpretu shellu při provádění každého příkazu, dvojí interpretaci znaku „$“ (používá se v shellu i make), s přihlédnutím k prolisům.
Tyto problémy jsou v Goals vyřešeny použitím symbolu „%“ místo „$“ pro proměnné sestavy („$“ zůstane pouze pro shell) pomocí analyzátoru LALR(1), který vyžaduje, abyste cesty a názvy souborů obklopili uvozovkami a zvýraznili bloky kódu složenými závorkami. Celý příkazový blok je spuštěn v jedné instanci příkazového shellu a v rámci bloku je povoleno libovolné formátování kódu bez odkazu na speciální mezery.
Bylo to:
cíl: foo.o bar.o
${CC} ${CFLAGS} $< -o $@
Dva režimy spouštění: režim make, který odpovídá cílům sestavení s názvy souborů (např. soubor „foo.o“ odpovídá cíli „%name.o“), a režim přímé kompilace:
cíl vše = : odkaz
odkaz na cíl =
"target" : "foo.o", kompilace ("bar") { ... }
Taktika sestavování je určena speciálními pravidly, která lze použít k určení potřeby opětovného sestavení cíle sestavy. Pokud je vytvořen odkaz na přítomnost souboru, je to výslovně určeno pomocí odpovídajícího znaku („cíl“ pro název pravidla a *soubor („cíl“) pro kontrolu souboru).
Vývojář může definovat libovolné atributy sestavovací taktiky. Ve výchozím nastavení je definován příznak "*file" (@{...} označuje potlačení výstupu a "exit 99" signalizuje potřebu přebudování):
taktika *soubor (název souboru) = @{
test -f %název souboru || výjezd 99
pro f v %