Red Hat-eko langile batek Goals muntaketa sistema aurkeztu zuen. GNU Make 4.2 bertsioa

Richard WM Jones, egilea libguestfs, Red Hat-en lanean, aurkeztu muntatzeko erabilgarritasun berria Golak, make-ren erabilgarritasunaren gabeziak eta arazoak ezabatzera zuzenduta, scripten soiltasun orokorra eta ulergarritasuna mantenduz. Make utility-a 1976an diseinatu zen eta hainbat gabezia kontzeptual ditu; Goals-ek gabezia horiek ezabatzeko asmoa du kontzeptu orokorra aldatu gabe.
Helburuak iturburu kodea arabera banatuta GPLv2+ lizentziapean.

Arazoak konpontzeko arazoak:

  • Mendekotasunen ebazpenerako taktika bakarraren laguntza: "muntatze-instrukzioa exekutatzen da xede-fitxategia falta bada edo mendekotasun bat baino zaharragoa bada". Helburuak beste taktika batzuk ezartzeko asmoa du, hala nola URL baten presentzia egiaztatzea, aldaketa-denborak edozein fitxategirekin alderatzea, paketea eraikitzea ebaluatzea. kōji, checksumen konparazioa, test kasuak exekutatzen probak hautazko saltoarekin.
  • Eraikitze-helburuak prozesatzen direnean, make-k ez ditu fitxategiak eta arau-izenak bereizten, eta, ondorioz, ez da egiaztatzen arau bat exekutatzen denean sortu dela dioen fitxategia benetan sortuko denik. Adibidez, "test" izeneko arau bat baduzu, testekin scriptak exekutatzen dituena, ustekabean "test" izeneko fitxategi bat sortzen da, orduan probak ez dira deituko, make-k helburua eraikita dagoela eta ez duela behar kontuan hartuko duelako. edozein ekintza (Make-n arazoari aurre egiteko, β€œ.PHONY: test” zuzentaraua zehaztu dezakezu). Helburuak espresuki bereizten ditu fitxategiak eta arau-izenak.

    Red Hat-eko langile batek Goals muntaketa sistema aurkeztu zuen. GNU Make 4.2 bertsioa

  • Muntatzeko argibideetarako parametro bakarra emateko arazoa.

    Red Hat-eko langile batek Goals muntaketa sistema aurkeztu zuen. GNU Make 4.2 bertsioa

    Helburuak aukera ematen du izendatutako parametro kopuru arbitrario bat erabiltzeko. Adibidez, bereizita atera dezakezu arazketa-fitxategi baten seinalea izenetik:

    Red Hat-eko langile batek Goals muntaketa sistema aurkeztu zuen. GNU Make 4.2 bertsioa

  • Shell interpretearekin elkarrekintzan aritzeko arazoak. Adibidez, fitxategien eta direktorioen izenetan espazioen ihesa kontrolatu beharra, komando bakoitza exekutatzen denean shell interpretatzaile bereizia abiarazteko baliabideak xahutzea, "$" karakterearen interpretazio bikoitza (shell-ean eta make-n erabiltzen da), koskak kontuan hartuta.

    Arazo hauek Goals-en konpontzen dira "%" ikurra erabiliz "$"-ren ordez muntaia-aldagaietarako ("$" shell-erako bakarrik geratzen da), analizatzaile bat erabiliz. LALR(1), bideak eta fitxategi-izenak komatxoz inguratzea eta giltza kizkurrekin kode-blokeak nabarmentzea eskatzen du. Komando-bloke osoa komando-shellaren instantzia batean abiarazten da, eta blokearen barruan, kode arbitrarioa formateatzea onartzen da, espazio bereziei erreferentziarik egin gabe.

    izan zen:
    xede: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Hau bihurtu zen:
    "helburua": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Helburuen beste ezaugarri batzuk:

  • Izen eta parametro arbitrarioak zehazteko aukerako laguntza:

    helburua guztiak = : "helburua"

    helburua esteka =
    "target" : "foo.o", "bar.o" { ... }

    helburua biltzea (izena) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Bi abiarazteko modu: egin modua eraikitzeko helburuak fitxategi-izenekin bat etortzeko (adibidez, "foo.o" fitxategiak "%name.o" helburuarekin bat egiten du) eta zuzeneko konpilazio modua:

    helburua guztiak = : esteka

    helburua esteka =
    "target" : "foo.o", konpilatu ("barra") { ... }

    helburua biltzea (izena) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Muntatze taktikak muntaketa helburu bat berriro muntatu beharra zehazteko erabil daitezkeen arau bereziek zehazten dituzte. Fitxategi baten presentziarako esteka egiten bada, dagokion zeinuaren bidez zehazten da ("helburua" arauaren izena eta *fitxategia ("helmuga") fitxategia egiaztatzeko).

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

    *fitxategia("helburua") : *fitxategia ("foo.o"), *fitxategia ("bar.o") { ... }

  • Garatzaileak muntaketa taktiken atributu arbitrarioak defini ditzake. "*fitxategia" bandera lehenespenez definituta dago (@{...} irteeraren kentzea adierazten du, eta "99. irteera" berreraikitzeko beharra adierazten du):

    taktika *fitxategia (fitxategi-izena) = @{
    test -f %fitxategi izena || 99 irteera
    f-rentzat %tan

    Iturria: opennet.ru

Gehitu iruzkin berria