Richard WM Jones, aŭtoro , laborante ĉe Red Hat, nova asemblea ilo , celante forigi la mankojn kaj problemojn de la ilo `make`, samtempe konservante la ĝeneralan simplecon kaj klarecon de la skriptoj. La ilo `make` estis desegnita en 1976 kaj havas kelkajn koncipajn difektojn. Celoj celas trakti ĉi tiujn difektojn sen ŝanĝi la ĝeneralan koncepton.
Fontkodo de Celoj licencita laŭ GPLv2+.
:
- Subteno por nur unu taktiko por solvi dependecojn — "konstrua instrukcio estas funkciigita se la cela dosiero mankas aŭ estas pli malnova ol unu el la dependecoj." Goals planas efektivigi aliajn taktikojn, kiel ekzemple kontroli la ĉeeston de URL, kompari modiftempojn kun iu ajn dosiero, kaj taksi la pakaĵan enkonstruon. , komparo de kontrolsumoj, funkciigo de testserioj kun selektema preterlaso de testoj.
- Dum prilaborado de konstruaj celoj, `make` ne distingas inter dosieroj kaj regulnomoj, kaj rezulte, ne estas kontrolo por certigi, ke la dosiero, kiun ĝi pretendas krei, efektive estos kreita kiam la regulo estos ruligita. Ekzemple, se regulo nomita "test" ruligas testskriptojn kaj dosiero nomita "test" estas hazarde kreita, la testoj ĉesos esti vokitaj, ĉar `make` supozos, ke la celo estis konstruita kaj ne postulas iujn ajn agojn. (Por eviti tion, vi povas specifi la direktivon ".PHONY:test" en `make`.) `Celoj` eksplicite distingas inter dosieroj kaj regulnomoj.

- Problemo pri provizado de nur unu parametro por asembleinstrukcioj.

Celoj permesas la uzon de ajna nombro da nomitaj parametroj. Ekzemple, vi povas aparte eltiri la flagon de la sencimiga dosiero el la nomo:

- Problemoj pri interagado kun la ŝelinterpretilo. Ekzemple, la bezono kontroli la eskapadon de spacetoj en dosiernomoj kaj dosierujoj, la rimedan koston de lanĉo de aparta ŝelinterpretilo por ĉiu komando, la duobla interpreto de la simbolo "$" (uzata kaj en la ŝelo kaj en la kreo), kaj la indentado.
La menciitaj problemoj estas solvitaj en Celoj per uzado de la simbolo "%" anstataŭ "$" por asembleaj variabloj ("$" restas nur por la ŝelo), uzante analizilon , kiu postulas citi vojojn kaj dosiernomojn kaj marki kodblokojn per krampoj. La tuta komandbloko estas rulata en ununura instanco de la komandŝelo, kaj ene de la bloko, arbitra kodformatado estas permesita, sen esti ligita per specialaj spacetoj.
Estis:
celo: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Ĝi fariĝis:
"celo": "foo.o", "bar.o" {
%CC %CFLAGOJ %< -o %@
}
Aliaj funkcioj de la Celoj:
- Laŭvola subteno por specifi kutimajn nomojn kaj parametrojn:
celo ĉiuj = : "celo"
cela ligo =
"celo": "foo.o", "bar.o" { ... }celo kompilo (nomo) =
"%nomo.o" : "%nomo.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - Du lanĉreĝimoj: krereĝimo por kongruigi konstrucelojn kun dosiernomoj (ekz. dosiero "foo.o" kongruas kun celo "%name.o"), kaj rekta kompilreĝimo:
celo ĉiuj = : ligo
cela ligo =
"celo" : "foo.o", kompili ("bar") { ... }celo kompilo (nomo) =
"%nomo.o" : "%nomo.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - Konstruaj taktikoj estas difinitaj per specialaj reguloj, kiuj povas esti uzataj por determini ĉu konstrua celo bezonas esti rekonstruita. Se dosierĉeesto estas necesa, tio estas eksplicite specifita uzante la taŭgan flagon ("celo" por la regulnomo kaj *dosiero("celo") por dosierkontrolado).
"celo": "foo.o", "bar.o" { ... }
*dosiero("celo") : *dosiero("foo.o"), *dosiero("bar.o") { ... }
- La programisto povas difini kutimajn konstruajn taktikojn. La flago "*file" estas difinita defaŭlte (@{…} indikas subpremon de eligo, kaj "exit 99" signalas la bezonon de rekonstruo):
taktiko *dosiero (dosiernomo) = @{
testo -f %dosiernomo || eliro 99
por f en %fonto: opennet.ru



