Zaposleni v podjetju Red Hat je predstavil sistem za sestavljanje Goals. Izdaja GNU Make 4.2

Richard WM Jones, avtor libguestfs, zaposlen pri Red Hat, uveden nov pripomoček za sestavljanje Cilji, namenjen odpravljanju pomanjkljivosti in težav v uporabnosti make ob ohranjanju splošne preprostosti in razumljivosti skriptov. Pripomoček make je bil zasnovan leta 1976 in ima številne konceptualne pomanjkljivosti; Goals namerava te pomanjkljivosti odpraviti brez spreminjanja splošnega koncepta.
Izvorna koda Goals distributer licenciran pod GPLv2+.

Rešljivi problemi:

  • Podpora za samo eno taktiko razreševanja odvisnosti - "navodilo za sestavljanje se zažene, če ciljna datoteka manjka ali je starejša od ene od odvisnosti." Goals načrtuje izvajanje drugih taktik, kot je preverjanje prisotnosti URL-ja, primerjava časov spreminjanja s katero koli datoteko, ocenjevanje vgrajenega paketa kōji, primerjava kontrolnih vsot, izvajanje testnih primerov s selektivnim preskakovanjem testov.
  • Pri obdelavi ciljev gradnje make ne ločuje datotek in imen pravil, zato ni nobenega preverjanja, ali bo pri izvajanju pravila datoteka, za katero trdi, da je ustvarjena, dejansko ustvarjena. Na primer, če imate pravilo z imenom "test", ki izvaja skripte s testi, je datoteka z imenom "test" pomotoma ustvarjena, nato pa testi ne bodo več klicani, saj bo make upošteval, da je cilj zgrajen in ne zahteva kakršno koli dejanje (če želite odpraviti težavo v make, lahko podate direktivo “.PHONY: test”). Cilji izrecno ločujejo imena datotek in pravil.

    Zaposleni v podjetju Red Hat je predstavil sistem za sestavljanje Goals. Izdaja GNU Make 4.2

  • Težava z zagotavljanjem samo enega parametra za navodila za sestavljanje.

    Zaposleni v podjetju Red Hat je predstavil sistem za sestavljanje Goals. Izdaja GNU Make 4.2

    Cilji vam omogočajo uporabo poljubnega števila poimenovanih parametrov. Na primer, iz imena lahko ločeno izvlečete znak datoteke za odpravljanje napak:

    Zaposleni v podjetju Red Hat je predstavil sistem za sestavljanje Goals. Izdaja GNU Make 4.2

  • Težave pri interakciji s tolmačem lupine. Na primer, potreba po nadzoru uhajanja presledkov v imenih datotek in imenikov, zapravljanje virov pri zagonu ločenega tolmača lupine pri izvajanju vsakega ukaza, dvojna interpretacija znaka "$" (uporablja se tako v lupini kot v make), ob upoštevanju vdolbin.

    Te težave so v Goals rešene z uporabo simbola »%« namesto »$« za spremenljivke sklopa (»$« ostane samo za lupino), z uporabo razčlenjevalnika LALR (1), ki zahteva, da poti in imena datotek obdate z narekovaji ter označite kodne bloke z zavitimi oklepaji. Celoten ukazni blok se zažene v enem primerku ukazne lupine, znotraj bloka pa je dovoljeno poljubno oblikovanje kode, brez sklicevanja na posebne presledke.

    Bilo je:
    cilj: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Postati:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Druge funkcije Goals:

  • Izbirna podpora za določanje poljubnih imen in parametrov:

    cilj vse = : "target"

    povezava do cilja =
    "target": "foo.o", "bar.o" { ... }

    cilj prevesti (ime) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Dva načina zagona: način ustvarjanja za ujemanje ciljev gradnje z imeni datotek (na primer datoteka "foo.o" se ujema s ciljem "%name.o") in način neposrednega prevajanja:

    cilj vse = : povezava

    povezava do cilja =
    "target" : "foo.o", prevedi ("bar") { ... }

    cilj prevesti (ime) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktika sestavljanja je določena s posebnimi pravili, na podlagi katerih je mogoče ugotoviti potrebo po ponovnem sestavljanju tarče za sestavljanje. Če je vzpostavljena povezava s prisotnostjo datoteke, je to izrecno določeno z ustreznim znakom (»target« za ime pravila in *file (»target«) za preverjanje datoteke).

    "target": "foo.o", "bar.o" { ... }

    *file("target") : *file("foo.o"), *file("bar.o") { ... }

  • Razvijalec lahko definira poljubne atribute taktike sestavljanja. Zastavica "*file" je privzeto določena (@{...} označuje zatiranje izhoda, "exit 99" pa signalizira potrebo po vnovični izgradnji):

    taktika *datoteka (ime datoteke) = @{
    test -f %ime datoteke || izhod 99
    za f v %

    Vir: opennet.ru

Dodaj komentar