Yon anplwaye Red Hat te prezante sistèm asanble Goals la. Liberasyon GNU Make 4.2

Richard WM Jones, otè libguestfs, k ap travay nan Red Hat, entwodwi nouvo sèvis piblik asanble Objektif, ki vize a elimine enpèfeksyon ak pwoblèm nan sèvis piblik la nan fè pandan w ap kenbe senplisite la an jeneral ak konprann nan Scripts. Te fè sèvis piblik la fèt an 1976 epi li gen yon kantite enpèfeksyon konseptyèl objektif pou elimine enpèfeksyon sa yo san yo pa chanje konsèp jeneral la.
Objektif sous kòd distribiye pa lisansye anba GPLv2+.

Pwoblèm yo dwe rezoud:

  • Sipò pou yon sèl taktik rezolisyon depandans - "enstriksyon asanble a ap kouri si dosye sib la manke oswa ki pi gran pase youn nan depandans yo." Objektif plan yo aplike lòt taktik, tankou tcheke pou prezans nan yon URL, konpare tan modifikasyon ak nenpòt ki dosye, evalye pake a bati nan kōji, konparezon nan checksums, kouri ka tès ak sote selektif nan tès yo.
  • Lè pwosesis bati sib, make pa separe dosye ak non règ, epi kòm yon rezilta, pa gen okenn chèk ke lè w ap kouri yon règ, dosye a li reklamasyon yo dwe kreye yo pral aktyèlman kreye. Pou egzanp, si ou gen yon règ ki rele "tès" ki kouri scripts ak tès yo, yon dosye ki rele "tès" yo kreye aksidantèlman, Lè sa a, tès yo pa pral rele ankò, depi make pral konsidere ke se sib la bati epi li pa mande. nenpòt aksyon (pou rezoud pwoblèm nan nan make, ou ka presize ".PHONY: tès" direktiv la). Objektif yo klèman separe dosye ak non règ yo.

    Yon anplwaye Red Hat te prezante sistèm asanble Goals la. Liberasyon GNU Make 4.2

  • Pwoblèm ak bay yon sèl paramèt pou enstriksyon asanble.

    Yon anplwaye Red Hat te prezante sistèm asanble Goals la. Liberasyon GNU Make 4.2

    Objektif pèmèt ou sèvi ak yon kantite abitrè nan paramèt yo nonmen. Pou egzanp, ou ka separeman ekstrè siy yon fichye debug nan non an:

    Yon anplwaye Red Hat te prezante sistèm asanble Goals la. Liberasyon GNU Make 4.2

  • Pwoblèm kominike avèk entèprèt koki a. Pou egzanp, bezwen pou kontwole chape nan espas nan non dosye ak anyè, fatra nan resous sou lanse yon entèprèt koki separe lè egzekite chak kòmand, entèpretasyon an doub nan karaktè "$" (yo itilize nan tou de koki ak fè), pran an kont endentasyon.

    Pwoblèm sa yo rezoud nan Objektif lè w itilize senbòl "%" olye de "$" pou varyab asanble ("$" rete sèlman pou kokiy la), lè l sèvi avèk yon analizeur. LALR(1), ki mande pou ou antoure chemen ak non dosye ak quotes epi mete aksan sou blòk kòd ak aparèy òtopedik boukle. Tout blòk lòd la lanse nan yon egzanp koki kòmand la, epi nan blòk la, fòma kòd abitrè yo pèmèt, san referans a espas espesyal.

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

    Te vin:
    "sib": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Lòt karakteristik nan objektif:

  • Sipò si ou vle pou espesifye non ak paramèt abitrè:

    objektif tout = : "sib"

    lyen objektif =
    "target" : "foo.o", "bar.o" { ... }

    konpile objektif (non) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • De mòd lansman: fè mòd matche ak sib bati ak non fichye (pa egzanp, fichye "foo.o" matche ak sib "%name.o"), ak mòd konpilasyon dirèk:

    objektif tout = : lyen

    lyen objektif =
    "sib" : "foo.o", konpile ("bar") { ... }

    konpile objektif (non) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktik asanble yo detèmine pa règ espesyal ki ka itilize pou detèmine nesesite pou remonte yon sib asanble. Si yo fè yon lyen nan prezans nan yon dosye, Lè sa a, sa a se klèman detèmine atravè siy ki koresponn lan ("sib" pou non règ la ak * fichye ("sib") pou tcheke dosye a).

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

    *fichye("sib"): *fichye("foo.o"), *fichye ("bar.o") { ... }

  • Pwomotè a ka defini atribi abitrè nan taktik asanble. Se drapo "*fichye" la defini pa default (@{...} endike sipresyon pwodiksyon an, epi "sòti 99" siyal nesesite pou rebati):

    taktik *fichye (non fichye) = @{
    tès -f %filename || sòti 99
    pou f nan %

    Sous: opennet.ru

Add nouvo kòmantè