In Red Hat-meiwurker presintearre it Goals-assemblagesysteem. Utjefte fan GNU Make 4.2

Richard WM Jones, skriuwer libguestfs, wurkje by Red Hat, yntrodusearre nij assembly utility Doel, rjochte op it eliminearjen fan tekoarten en problemen yn it nut fan meitsje, wylst de algemiene ienfâld en begryp fan skripts behâlde. It make-nutsbedriuw is ûntworpen yn 1976 en hat in oantal konseptuele tekortkomingen; Doelen binne fan plan om dizze tekoarten te eliminearjen sûnder it algemiene konsept te feroarjen.
Doelen boarne koade ferspraat troch lisinsje ûnder GPLv2+.

Solvabele problemen:

  • Stipe foar mar ien taktyk foar resolúsje fan ôfhinklikens - "de assemblage-ynstruksje wurdt útfierd as it doelbestân ûntbrekt of âlder is dan ien fan 'e ôfhinklikens." Doelen binne plannen om oare taktyk út te fieren, lykas kontrolearjen op de oanwêzigens fan in URL, fergelykjen fan wizigingstiden mei elk bestân, evaluearje fan it ynboude pakket kōji, fergeliking fan kontrôlesummen, testgefallen útfiere mei selektyf oerslaan fan tests.
  • By it ferwurkjen fan build-doelen, makket meitsje gjin skieden fan triemmen en regelnammen, en as gefolch is d'r gjin kontrôle dat by it útfieren fan in regel, it bestân dat it beweart dat it makke is, wirklik oanmakke wurdt. As jo ​​​​bygelyks in regel hawwe mei de namme "test" dy't skripts mei tests útfiert, wurdt in bestân mei de namme "test" by ûngelok oanmakke, dan wurde de tests net mear oanroppen, om't make sil beskôgje dat it doel is boud en net fereasket eltse aksje (foar Om te wurkjen om it probleem yn make, kinne jo opjaan de ".PHONY: test" rjochtline). Doelen skiedt bestannen en regelnammen eksplisyt.

    In Red Hat-meiwurker presintearre it Goals-assemblagesysteem. Utjefte fan GNU Make 4.2

  • Probleem mei it jaan fan mar ien parameter foar montage ynstruksjes.

    In Red Hat-meiwurker presintearre it Goals-assemblagesysteem. Utjefte fan GNU Make 4.2

    Doelen kinne jo in willekeurige oantal neamde parameters brûke. Jo kinne bygelyks it teken fan in debugbestân apart út 'e namme ekstrahearje:

    In Red Hat-meiwurker presintearre it Goals-assemblagesysteem. Utjefte fan GNU Make 4.2

  • Problemen yn ynteraksje mei de shell-tolk. Bygelyks, de needsaak om it ûntsnappen fan spaasjes yn triem- en mapnammen te kontrolearjen, de fergriemerij fan boarnen by it starten fan in aparte shell-tolk by it útfieren fan elk kommando, de dûbele ynterpretaasje fan it karakter "$" (brûkt yn sawol shell as make), rekken hâldend mei ynspringingen.

    Dizze problemen wurde yn Doelen oplost troch it symboal "%" te brûken ynstee fan "$" foar gearstallingsfariabelen ("$" bliuwt allinich foar de shell), mei in parser LALR(1). It hiele kommandoblok wurdt lansearre yn ien eksimplaar fan 'e kommando-shell, en binnen it blok is willekeurige koade-opmaak tastien, sûnder ferwizing nei spesjale spaasjes.

    wie:
    doel: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Oare funksjes fan doelen:

  • Opsjonele stipe foar it opjaan fan willekeurige nammen en parameters:

    goal all = : "target"

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

    goal kompilearje (namme) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Twa startmodi: meitsje modus om boudoelen te passen mei bestânsnammen (bygelyks bestân "foo.o" komt oerien mei doel "%name.o"), en direkte kompilaasjemodus:

    goal all = : link

    goal link =
    "target" : "foo.o", kompilearje ("bar") { ... }

    goal kompilearje (namme) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Gearstallingstaktiken wurde bepaald troch spesjale regels dy't kinne wurde brûkt om de needsaak te bepalen om in gearstallingsdoel opnij te sammeljen. As in keppeling makke wurdt nei de oanwêzigens fan in bestân, dan wurdt dit eksplisyt bepaald troch it oerienkommende teken ("doel" foar de regelnamme en *bestân ("doel") foar it kontrolearjen fan it bestân).

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

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

  • De ûntwikkelder kin willekeurige attributen fan gearstallingstaktyk definiearje. De flagge "*bestân" is standert definiearre (@{...} jout ûnderdrukking fan útfier oan, en "útgong 99" sinjalearret de needsaak foar werbou):

    taktyk *bestân (bestânnamme) = @{
    test -f %triemnamme || út 99
    foar f yn %

    Boarne: opennet.ru

Add a comment