Usa ka empleyado sa Red Hat ang nagpresentar sa Goals assembly system. Pagpagawas sa GNU Make 4.2

Richard WM Jones, awtor libguestfs, nagtrabaho sa Red Hat, gipaila bag-ong assembly utility Mga tumong, nga gitumong sa pagwagtang sa mga kakulangan ug mga problema sa paggamit sa paghimo samtang nagpadayon sa kinatibuk-ang kayano ug masabtan sa mga script. Ang make utility gidisenyo kaniadtong 1976 ug adunay daghang mga kakulangan sa konsepto; Ang mga katuyoan nagplano nga wagtangon kini nga mga kakulangan nga dili usbon ang kinatibuk-ang konsepto.
Mga tumong source code giapod-apod sa lisensyado ubos sa GPLv2+.

Mga problema nga sulbaron:

  • Suporta alang sa usa lamang ka taktika sa resolusyon sa dependency - "ang instruksyon sa asembliya gipadagan kung ang target file nawala o mas tigulang kay sa usa sa mga dependency." Ang mga katuyoan nagplano nga ipatuman ang ubang mga taktika, sama sa pagsusi sa presensya sa usa ka URL, pagtandi sa mga oras sa pagbag-o sa bisan unsang file, pagtimbang-timbang sa gitukod nga package. koji, pagtandi sa mga checksum, pagpadagan sa mga kaso sa pagsulay nga adunay pinili nga paglaktaw sa mga pagsulay.
  • Kung ang pagproseso sa mga target sa pagtukod, paghimo dili pagbulag sa mga file ug mga ngalan sa lagda, ug ingon usa ka sangputanan, wala’y tseke nga kung nagdagan ang usa ka lagda, ang file nga giangkon niini nga gimugna mahimo gyud. Pananglitan, kung ikaw adunay usa ka lagda nga gitawag nga "pagsulay" nga nagpadagan sa mga script nga adunay mga pagsulay, usa ka file nga ginganlag "pagsulay" nga aksidente nga nahimo, nan ang mga pagsulay dili na tawgon, tungod kay ang make magkonsiderar nga ang target gitukod ug wala magkinahanglan. bisan unsa nga aksyon (para Sa pagsulbad sa problema sa paghimo, mahimo nimong ipiho ang ".PHONY: test" nga direktiba). Ang mga tumong klaro nga nagbulag sa mga file ug mga ngalan sa lagda.

    Usa ka empleyado sa Red Hat ang nagpresentar sa Goals assembly system. Pagpagawas sa GNU Make 4.2

  • Problema sa paghatag ug usa lang ka parametro para sa mga instruksyon sa asembliya.

    Usa ka empleyado sa Red Hat ang nagpresentar sa Goals assembly system. Pagpagawas sa GNU Make 4.2

    Ang mga tumong nagtugot kanimo sa paggamit sa usa ka arbitraryong gidaghanon sa ginganlan nga mga parameter. Pananglitan, mahimo nimong ilain ang pagkuha sa timaan sa usa ka debug file gikan sa ngalan:

    Usa ka empleyado sa Red Hat ang nagpresentar sa Goals assembly system. Pagpagawas sa GNU Make 4.2

  • Mga problema nga nakig-interact sa shell interpreter. Pananglitan, ang panginahanglan sa pagpugong sa pag-ikyas sa mga luna sa mga ngalan sa file ug direktoryo, ang pag-usik sa mga kahinguhaan sa paglansad sa usa ka separado nga tighubad sa kabhang sa dihang nagpatuman sa matag sugo, ang dobleng interpretasyon sa karakter nga "$" (gigamit sa duha ka kabhang ug paghimo), nga nagkonsiderar sa mga indentasyon.

    Kini nga mga problema masulbad sa Mga Tumong pinaagi sa paggamit sa "%" nga simbolo imbes nga "$" alang sa mga variable sa pag-assemble ("$" nagpabilin lamang alang sa kabhang), gamit ang usa ka parser LALR(1), nga nanginahanglan kanimo nga palibutan ang mga agianan ug mga ngalan sa file nga adunay mga kinutlo ug i-highlight ang mga bloke sa code nga adunay mga kulot nga braces. Ang tibuok command block gilunsad sa usa ka higayon sa command shell, ug sulod sa block, ang arbitraryong code formatting gitugotan, nga walay paghisgot sa espesyal nga mga luna.

    Kaniadto:
    target: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Uban pang mga bahin sa Mga Tumong:

  • Opsyonal nga suporta para sa pagpiho sa arbitraryong mga ngalan ug mga parametro:

    tumong tanan = : "target"

    link sa tumong =
    "target" : "foo.o", "bar.o" { ... }

    tumong compile (ngalan) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Duha ka mode sa paglansad: paghimo og mode aron ipares ang mga target sa pagtukod nga adunay mga filename (pananglitan, ang file nga "foo.o" motugma sa target nga "%name.o"), ug direkta nga mode sa pag-compile:

    tumong tanan = : link

    link sa tumong =
    "target" : "foo.o", compile ("bar") { ... }

    tumong compile (ngalan) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Ang mga taktika sa asembliya gitino pinaagi sa mga espesyal nga lagda nga magamit aron mahibal-an ang panginahanglan sa pagtipon pag-usab sa usa ka target sa asembliya. Kung ang usa ka link gihimo sa presensya sa usa ka file, nan kini klaro nga gitino pinaagi sa katugbang nga timaan ("target" alang sa ngalan sa lagda ug *file ("target") alang sa pagsusi sa file).

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

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

  • Mahimong ipasabut sa developer ang arbitraryong mga hiyas sa mga taktika sa asembliya. Ang "* file" nga bandila gihubit pinaagi sa default (@{...} nagpaila sa pagsumpo sa output, ug ang "exit 99" nagpahibalo sa panginahanglan sa pagtukod pag-usab):

    taktika *file (filename) = @{
    pagsulay -f% filename || paggawas 99
    alang sa f sa%

    Source: opennet.ru

Idugang sa usa ka comment