Një punonjës i Red Hat prezantoi sistemin e montimit të Goals. Lëshimi i GNU Make 4.2

Richard WM Jones, autor libguestfs, duke punuar në Red Hat, paraqitur mjet i ri i ndërtimit Objektivat, që synon eliminimin e mangësive dhe problemeve në dobinë e make duke ruajtur thjeshtësinë dhe kuptueshmërinë e përgjithshme të skripteve. Makina u krijua në vitin 1976 dhe ka një sërë mangësish konceptuale; Objektivat planifikon t'i eliminojë këto mangësi pa ndryshuar konceptin e përgjithshëm.
Kodi burimor i qëllimeve shperndare nga licencuar sipas GPLv2+.

Probleme për t'u zgjidhur:

  • Mbështetje për vetëm një taktikë të zgjidhjes së varësisë - "udhëzimet e montimit ekzekutohen nëse skedari i synuar mungon ose është më i vjetër se një nga varësitë." Objektivat planifikon të zbatojë taktika të tjera, të tilla si kontrolli për praninë e një URL, krahasimi i kohërave të modifikimit me çdo skedar, vlerësimi i paketës së ndërtuar në koji, krahasimi i shumave kontrolluese, ekzekutimi i rasteve të testimit me anashkalim selektiv të testeve.
  • Kur përpunoni objektivat e ndërtimit, make nuk i ndan skedarët dhe emrat e rregullave, dhe si rezultat, nuk kontrollohet nëse kur ekzekutoni një rregull, skedari që pretendon se është krijuar do të krijohet në të vërtetë. Për shembull, nëse keni një rregull të quajtur "test" që ekzekuton skriptet me teste, një skedar me emrin "test" është krijuar aksidentalisht, atëherë testet nuk do të thirren më, pasi make do të konsiderojë se objektivi është ndërtuar dhe nuk kërkon çdo veprim (për të zgjidhur problemin në markë, mund të specifikoni direktivën “.PHONY: test”). Objektivat ndan në mënyrë eksplicite skedarët dhe emrat e rregullave.

    Një punonjës i Red Hat prezantoi sistemin e montimit të Goals. Lëshimi i GNU Make 4.2

  • Problem me sigurimin e vetëm një parametri për udhëzimet e montimit.

    Një punonjës i Red Hat prezantoi sistemin e montimit të Goals. Lëshimi i GNU Make 4.2

    Qëllimet ju lejojnë të përdorni një numër arbitrar parametrash të emërtuar. Për shembull, mund të nxirrni veçmas shenjën e një skedari korrigjimi nga emri:

    Një punonjës i Red Hat prezantoi sistemin e montimit të Goals. Lëshimi i GNU Make 4.2

  • Probleme në bashkëveprimin me përkthyesin e guaskës. Për shembull, nevoja për të kontrolluar ikjen e hapësirave në emrat e skedarëve dhe drejtorive, humbjen e burimeve për lëshimin e një përkthyesi të veçantë shell gjatë ekzekutimit të çdo komande, interpretimin e dyfishtë të karakterit "$" (përdoret si në shell ashtu edhe në make), duke marrë parasysh dhëmbëzimet.

    Këto probleme zgjidhen te Objektivat duke përdorur simbolin "%" në vend të "$" për variablat e montimit ("$" mbetet vetëm për guaskën), duke përdorur një analizues LALR (1), e cila kërkon që ju të rrethoni shtigjet dhe emrat e skedarëve me thonjëza dhe të nënvizoni blloqet e kodit me kllapa kaçurrelë. I gjithë blloku i komandës lëshohet në një shembull të guaskës së komandës dhe brenda bllokut, lejohet formatimi arbitrar i kodit, pa iu referuar hapësirave të veçanta.

    ishte:
    objektiv: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Karakteristika të tjera të Objektivave:

  • Mbështetje opsionale për specifikimin e emrave dhe parametrave arbitrarë:

    qëllimi të gjithë = : "objektivi"

    lidhje e qëllimit =
    "target" : "foo.o", "bar.o" { ... }

    përpilimi i qëllimit (emri) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Dy mënyra nisjeje: modaliteti i krijimit për të përputhur objektivat e ndërtimit me emrat e skedarëve (për shembull, skedari "foo.o" përputhet me objektivin "%name.o") dhe modaliteti i përpilimit të drejtpërdrejtë:

    qëllimi të gjithë = : lidhje

    lidhje e qëllimit =
    "target" : "foo.o", compile ("bar") { ... }

    përpilimi i qëllimit (emri) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktikat e montimit përcaktohen nga rregulla të veçanta që mund të përdoren për të përcaktuar nevojën për të ribashkuar një objektiv montimi. Nëse bëhet një lidhje me praninë e një skedari, atëherë kjo përcaktohet në mënyrë eksplicite përmes shenjës përkatëse ("objektivi" për emrin e rregullit dhe *file ("target") për kontrollimin e skedarit).

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

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

  • Zhvilluesi mund të përcaktojë atribute arbitrare të taktikave të montimit. Flamuri "*file" përcaktohet si parazgjedhje (@{...} tregon shtypjen e daljes dhe "dalja 99" sinjalizon nevojën për rindërtim):

    taktikë *file (emri i skedarit) = @{
    test -f %emri i skedarit || dalja 99
    për f në %

    Burimi: opennet.ru

Shto një koment