Richard Jones (Richard WM Jones), författare , arbetande pÄ Red Hat, ett nytt byggverktyg , som syftar till att ÄtgÀrda brister och problem med make-verktyget samtidigt som man behÄller den övergripande enkelheten och tydligheten i script. Make-verktyget designades 1976 och har flera konceptuella brister, som planeras att ÄtgÀrdas i MÄl utan att Àndra den grundlÀggande konceptet.
KÀllkoden för MÄl under GPLv2+.
:
- Stöd för endast en taktik vid hantering av beroenden â "bygginstruktionen körs om mĂ„lfilen saknas eller Ă€r Ă€ldre Ă€n nĂ„gon av beroenden". I MĂ„l planeras det att implementera andra taktiker, sĂ„som att kontrollera URL:er, jĂ€mföra tidsstĂ€mplar med vilken fil som helst, och utvĂ€rdera byggprocessen i , jĂ€mföra kontrollsummor, och köra testsviter med selektivt bortfall av tester.
- Vid hantering av byggmÄl separerar make-verktyget inte filer och regelnamn, vilket leder till att det saknas en kontroll om att filen verkligen kommer att skapas nÀr regeln körs. Till exempel, om en regel med namnet "test", som kör tester, av misstag skapar en fil med namnet "test", kommer testerna att sluta köras, eftersom make anser att mÄlet har uppnÄtts och inte behöver utföra nÄgra ÄtgÀrder (för att kringgÄ problemet i make kan man ange direktivet ".PHONY: test"). MÄl separerar tydligt filer och regelnamn.

- Problemet med att förse endast ett argument för bygginstruktioner.

I MÄl föreslÄs att anvÀnda ett valfritt antal namngivna argument. Till exempel kan man sÀrskilt extrahera en egenskap av en debugfil ur namnet:

- Problem med samverkan med shell-tolk. Till exempel, behovet av att kontrollera vilka tecken som ska undvikas i fil- och mappnamn, resursförbrukningen vid körning av en separat shell-tolk för varje kommando, dubbel tolkning av tecknet "$" (som anvÀnds bÄde i shell och i make), hÀnsyn till indragningar.
Dessa problem löses i MÄl genom att anvÀnda tecknet "%" istÀllet för "$" för byggvariabler ("$" förblir endast för shell), genom att anvÀnda parsers , som krÀver att sökvÀgar och filnamn omges av citattecken och att kodblock markeras med klamrar. Hela blocket körs i en instans av kommandotolken, och inom blocket Àr godtycklig kodformatering tillÄten, utan bindning till specifika mellanrum.
Förut:
mÄl: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Nu:
«mÄl»: «foo.o», «bar.o» {
LAGS < -o %@
}
Andra egenskaper hos mÄl:
- Valfri support för att ange godtyckliga namn och parametrar:
mÄl all = : «mÄl»
mÄl lÀnk =
«mÄl» : «foo.o», «bar.o» { ⊠}mÄl kompilera (namn) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - TvÄ körlÀgen: make-lÀget för att matcha byggmÄl med filnamn (till exempel filen «foo.o» motsvarar mÄlet «%name.o»), och lÀget för direkt körning av kompilering:
mÄl all = : lÀnk
mÄl lÀnk =
«mÄl» : «foo.o», kompilera («bar») { ⊠}mÄl kompilera (namn) =
«%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ } - Byggtaktiken definieras av speciella regler, genom vilka behovet av att ombygga byggmÄlet kan faststÀllas. Om det Àr kopplat till filens nÀrvaro, definieras detta tydligt genom motsvarande kÀnnetecken («mÄl» för regelnamn och *file(«mÄl») för filkontroll).
«mÄl» : «foo.o», «bar.o» { ⊠}
*file(«mÄl») : *file(«foo.o»), *file(«bar.o») { ⊠}
- Utvecklaren kan definiera godtyckliga kĂ€nnetecken för byggtaktik. KĂ€nnetecknet «*file» Ă€r definierat som standard (@{âŠ} indikerar att utdata ska tystas, och «exit 99» signalerar behovet av att ombygga):
taktik *file (filnamn) = @{
test -f %filename || exit 99
for f in %KĂ€lla: opennet.ru



