Cyflwynodd gweithiwr Red Hat y system cydosod Nodau. Rhyddhau GNU Make 4.2

Richard WM Jones, awdur libguestfs, yn gweithio yn Red Hat, cyflwyno cyfleustodau cynulliad newydd Nodau, gyda'r nod o ddileu diffygion a phroblemau o ran defnyddioldeb y gwneuthuriad tra'n cynnal symlrwydd a dealladwyedd cyffredinol sgriptiau. Cynlluniwyd y cyfleustodau gwneud yn 1976 ac mae ganddo nifer o ddiffygion cysyniadol; Nodau cynlluniau i ddileu diffygion hyn heb newid y cysyniad cyffredinol.
Cod ffynhonnell nodau dosbarthu gan wedi'i drwyddedu o dan GPLv2+.

Problemau i'w datrys:

  • Cefnogaeth i un dacteg datrys dibyniaeth yn unig - “mae cyfarwyddyd y cynulliad yn cael ei redeg os yw'r ffeil darged ar goll neu'n hŷn nag un o'r dibyniaethau.” Mae nodau'n bwriadu gweithredu tactegau eraill, megis gwirio am bresenoldeb URL, cymharu amseroedd addasu ag unrhyw ffeil, gwerthuso'r pecyn pecyn kōji, cymharu checksums, rhedeg achosion prawf gyda sgipio dethol o brofion.
  • Wrth brosesu targedau adeiladu, nid yw gwneud yn gwahanu ffeiliau ac enwau rheol, ac o ganlyniad, nid oes gwiriad, wrth redeg rheol, y bydd y ffeil y mae'n honni ei bod yn cael ei chreu yn cael ei chreu mewn gwirionedd. Er enghraifft, os oes gennych reol o'r enw "prawf" sy'n rhedeg sgriptiau gyda phrofion, mae ffeil o'r enw "prawf" yn cael ei chreu'n ddamweiniol, yna ni fydd y profion yn cael eu galw mwyach, gan y bydd make yn ystyried bod y targed wedi'i adeiladu ac nad oes angen unrhyw gamau gweithredu (ar gyfer Er mwyn gweithio o gwmpas y broblem yn gwneud, gallwch nodi y “. PHONY: prawf”) gyfarwyddeb). Mae nodau yn gwahanu ffeiliau ac enwau rheolau yn benodol.

    Cyflwynodd gweithiwr Red Hat y system cydosod Nodau. Rhyddhau GNU Make 4.2

  • Problem gyda darparu dim ond un paramedr ar gyfer cyfarwyddiadau cydosod.

    Cyflwynodd gweithiwr Red Hat y system cydosod Nodau. Rhyddhau GNU Make 4.2

    Mae nodau yn caniatáu ichi ddefnyddio nifer mympwyol o baramedrau a enwir. Er enghraifft, gallwch dynnu arwydd ffeil dadfygio ar wahân o'r enw:

    Cyflwynodd gweithiwr Red Hat y system cydosod Nodau. Rhyddhau GNU Make 4.2

  • Problemau rhyngweithio gyda'r dehonglydd cragen. Er enghraifft, yr angen i reoli dianc bylchau mewn enwau ffeiliau a chyfeiriaduron, gwastraff adnoddau ar lansio dehonglydd cragen ar wahân wrth weithredu pob gorchymyn, dehongliad dwbl y nod “$” (a ddefnyddir yn y ddau gragen a gwneuthuriad), gan gymryd i ystyriaeth mewnoliadau.

    Mae'r problemau hyn yn cael eu datrys yn Nodau trwy ddefnyddio'r symbol “%” yn lle “$” ar gyfer newidynnau cydosod (“$” yn aros ar gyfer y gragen yn unig), gan ddefnyddio parser LALR(1), sy'n gofyn ichi amgylchynu llwybrau ac enwau ffeiliau gyda dyfynbrisiau ac amlygu blociau cod gyda braces cyrliog. Mae'r bloc gorchymyn cyfan yn cael ei lansio mewn un achos o'r gragen gorchymyn, a chaniateir fformatio cod mympwyol y tu mewn i'r bloc, heb gyfeirio at fannau arbennig.

    Oedd:
    targed: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Daeth yn:
    "targed": "foo.o", "bar.o" {
    % CC % CFLAGS %< -o %@
    }

Nodweddion eraill Nodau:

  • Cefnogaeth ddewisol ar gyfer nodi enwau a pharamedrau mympwyol:

    nod pawb = : "target"

    cyswllt nod =
    "target" : "foo.o", "bar.o" {... }

    nod llunio (enw) =
    " %name.o " : " %name.c " , " dep.h " { %CC %CFLAGS -c $^ -o $@ }

  • Dau ddull lansio: gwneud modd i baru targedau adeiladu ag enwau ffeiliau (e.e. ffeil "foo.o" yn cyfateb i'r targed "%name.o"), a modd crynhoi yn uniongyrchol:

    nod pob = : link

    cyswllt nod =
    "target" : "foo.o", llunio ("bar") {... }

    nod llunio (enw) =
    " %name.o " : " %name.c " , " dep.h " { %CC %CFLAGS -c $^ -o $@ }

  • Mae tactegau cynulliad yn cael eu pennu gan reolau arbennig y gellir eu defnyddio i bennu'r angen i ail-osod targed cynulliad. Os gwneir cysylltiad â phresenoldeb ffeil, yna caiff hyn ei bennu'n benodol trwy'r arwydd cyfatebol (“targed” ar gyfer enw'r rheol a *ffeil (“targed”) ar gyfer gwirio'r ffeil).

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

    *ffeil ("targed") : *ffeil ("foo.o"), *ffeil ("bar.o") {... }

  • Gall y datblygwr ddiffinio priodoleddau mympwyol tactegau cydosod. Diffinnir y faner "*file" yn ddiofyn (mae @{...} yn dynodi ataliad allbwn, ac mae "allanfa 99" yn arwydd bod angen ailadeiladu):

    tacteg *ffeil (enw ffeil) = @{
    test -f %filename || allanfa 99
    ar gyfer f mewn %

    Ffynhonnell: opennet.ru

Ychwanegu sylw