Mfanyikazi wa Red Hat aliwasilisha mfumo wa mkusanyiko wa Malengo. Kutolewa kwa GNU Make 4.2

Richard WM Jones, mwandishi libguestfsHufanya kazi Red Hat, kuletwa matumizi mapya ya kusanyiko Malengo ya, yenye lengo la kuondoa mapungufu na matatizo katika matumizi ya kufanya wakati wa kudumisha unyenyekevu wa jumla na uelewa wa maandiko. The make utility iliundwa mwaka 1976 na ina idadi ya mapungufu ya dhana Malengo yanapanga kuondoa mapungufu haya bila kubadilisha dhana ya jumla.
Msimbo wa chanzo wa malengo kusambazwa na iliyopewa leseni chini ya GPLv2+.

Matatizo ya kutatuliwa:

  • Usaidizi wa mbinu moja tu ya kusuluhisha utegemezi - "maagizo ya mkusanyiko hutekelezwa ikiwa faili inayolengwa haipo au ni ya zamani zaidi ya moja ya tegemezi." Malengo yanapanga kutekeleza mbinu zingine, kama vile kuangalia uwepo wa URL, kulinganisha nyakati za urekebishaji na faili yoyote, kutathmini muundo wa kifurushi. koji, kulinganisha kwa cheki, kuendesha kesi za majaribio na kuruka majaribio kwa kuchagua.
  • Wakati wa usindikaji wa malengo ya kujenga, make hautenganishi faili na majina ya utawala, na kwa sababu hiyo, hakuna hundi kwamba wakati wa kuendesha sheria, faili ambayo inadai kuundwa itaundwa kweli. Kwa mfano, ikiwa una sheria inayoitwa "mtihani" ambayo inaendesha maandishi na vipimo, faili inayoitwa "test" imeundwa kwa bahati mbaya, basi majaribio hayataitwa tena, kwani make itazingatia kuwa lengo limejengwa na hauitaji. hatua yoyote (kwa Kushughulikia tatizo katika kutengeneza, unaweza kutaja maagizo ya ".PHONY: test"). Malengo hutenganisha faili na kanuni kwa uwazi.

    Mfanyikazi wa Red Hat aliwasilisha mfumo wa mkusanyiko wa Malengo. Kutolewa kwa GNU Make 4.2
  • Tatizo la kutoa parameter moja tu kwa maagizo ya mkutano.

    Mfanyikazi wa Red Hat aliwasilisha mfumo wa mkusanyiko wa Malengo. Kutolewa kwa GNU Make 4.2

    Malengo hukuruhusu kutumia nambari kiholela ya vigezo vilivyotajwa. Kwa mfano, unaweza kutoa kando ishara ya faili ya utatuzi kutoka kwa jina:

    Mfanyikazi wa Red Hat aliwasilisha mfumo wa mkusanyiko wa Malengo. Kutolewa kwa GNU Make 4.2
  • Matatizo ya kuingiliana na mkalimani wa shell. Kwa mfano, hitaji la kudhibiti kutoroka kwa nafasi katika majina ya faili na saraka, upotezaji wa rasilimali katika kuzindua mkalimani tofauti wa ganda wakati wa kutekeleza kila amri, tafsiri mara mbili ya herufi ya "$" (inayotumika kwenye ganda na kutengeneza), kwa kuzingatia indentations.

    Matatizo haya yanatatuliwa katika Malengo kwa kutumia alama ya “%” badala ya “$” kwa viambatisho vya mkusanyiko (“$” inabaki kwa ganda pekee), kwa kutumia kichanganuzi. LALR(1), ambayo inakuhitaji kuzunguka njia na majina ya faili kwa nukuu na kuangazia vizuizi vya msimbo kwa brashi zilizopinda. Kizuizi kizima cha amri kinazinduliwa kwa mfano mmoja wa ganda la amri, na uundaji wa msimbo wa kiholela unaruhusiwa ndani ya kizuizi, bila kutaja nafasi maalum.

    Ilikuwa:
    lengo: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Vipengele vingine vya Malengo:

  • Usaidizi wa hiari wa kubainisha majina na vigezo vya kiholela:

    goal all = : "target"

    kiungo cha lengo =
    "target" : "foo.o", "bar.o" { ... }

    lengo kukusanya (jina) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Njia mbili za uzinduzi: tengeneza modi ili kulinganisha malengo ya muundo na majina ya faili (k.m. faili "foo.o" inalingana na lengo "%name.o"), na hali ya ujumuishaji wa moja kwa moja:

    lengo yote = : kiungo

    kiungo cha lengo =
    "target" : "foo.o", kusanya ("bar") { ... }

    lengo kukusanya (jina) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Mbinu za mkutano huamuliwa na sheria maalum ambazo zinaweza kutumika kuamua hitaji la kuunganisha tena lengo la mkutano. Ikiwa kiungo kinafanywa kwa uwepo wa faili, basi hii imedhamiriwa kwa uwazi kupitia ishara inayofanana ("lengo" la jina la utawala na *faili ("lengo") kwa kuangalia faili).

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

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

  • Msanidi programu anaweza kufafanua sifa za kiholela za mbinu za mkusanyiko. Alama ya "*faili" inafafanuliwa kwa chaguo-msingi (@{...} inaonyesha ukandamizaji wa pato, na "toka 99" inaashiria hitaji la kuunda upya):

    mbinu *faili (jina la faili) = @{
    test -f %jina la faili || kutoka 99
    kwa f katika%

    Chanzo: opennet.ru

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster