E Red Hat Mataarbechter huet de Goals Assemblée System presentéiert. Verëffentlechung vum GNU Make 4.2

Richard WM Jones, Auteur libguestfs, schaffen um Red Hat, agefouert nei Assemblée Utility Zieler, zielt fir Mängel a Probleemer an der Utilitéit vum Make ze eliminéieren, während d'allgemeng Einfachheet an d'Verständlechkeet vun de Skripte behalen. D'Make-Utility gouf am 1976 entworf an huet eng Rei vu konzeptuellen Defiziter Pläng fir dës Mängel ze eliminéieren ouni d'allgemeng Konzept ze änneren.
Ziler Quelltext verdeelt duerch lizenzéiert ënner GPLv2+.

Geléist Problemer:

  • Ënnerstëtzung fir nëmmen eng Ofhängegkeetsresolutiounstaktik - "d'Versammlungsinstruktioun gëtt ausgefouert wann d'Zildatei fehlt oder méi al ass wéi eng vun den Ofhängegkeeten." Ziler plangen aner Taktiken ëmzesetzen, wéi z.B. d'Präsenz vun enger URL ze kontrolléieren, d'Modifikatiounszäite mat all Datei ze vergläichen, d'Evaluatioun vum Package agebaut kōji, Verglach vu Kontrollsummen, Lafen Testfäll mat selektiven Iwwersprangen vun Tester.
  • Wann Veraarbechtung Build Ziler, maachen trennt net Fichieren a Regel Nimm, an als Resultat, et gëtt keng Kontroll, datt wann Dir eng Regel leeft, de Fichier se behaapt geschaf ginn eigentlech geschaf. Zum Beispill, wann Dir eng Regel genannt "Test" hutt, déi Scripte mat Tester leeft, gëtt e Fichier mam Numm "Test" zoufälleg erstallt, da ginn d'Tester net méi genannt, well Make betruecht datt d'Zil gebaut ass an net erfuerdert all Aktioun (fir Fir ëm de Problem am maachen ze schaffen, Dir kënnt de ".PHONY: Test" Direktiv uginn). Ziler trennt explizit Dateien a Regelnimm.

    E Red Hat Mataarbechter huet de Goals Assemblée System presentéiert. Verëffentlechung vum GNU Make 4.2

  • Problem mat nëmmen ee Parameter fir Montageinstruktiounen.

    E Red Hat Mataarbechter huet de Goals Assemblée System presentéiert. Verëffentlechung vum GNU Make 4.2

    Ziler erlaabt Iech eng arbiträr Zuel vu genannte Parameteren ze benotzen. Zum Beispill kënnt Dir d'Zeeche vun enger Debug-Datei vum Numm separat extrahéieren:

    E Red Hat Mataarbechter huet de Goals Assemblée System presentéiert. Verëffentlechung vum GNU Make 4.2

  • Problemer interagéieren mam Shell Dolmetscher. Zum Beispill, d'Noutwendegkeet fir d'Entkommen vun de Plazen an de Datei- an Verzeichnungsnimm ze kontrolléieren, d'Verschwendung vu Ressourcen beim Start vun engem separaten Shell-Interpreter wann Dir all Kommando ausféiert, d'duebel Interpretatioun vum Charakter "$" (benotzt a Shell a Make), Rechnung gedroe vun Abriecher.

    Dës Probleemer ginn an Ziler geléist andeems Dir de "%" Symbol benotzt anstatt "$" fir Assemblée Variablen ("$" bleift nëmme fir d'Schuel), mat engem Parser LALR (1), wat erfuerdert datt Dir Weeër an Dateinumm mat Zitater ëmginn an Codeblocken mat gekrauselten Klameren markéieren. De ganze Kommandoblock gëtt an enger Instanz vun der Kommandoshell gestart, a bannent dem Block ass arbiträr Codeformatéierung erlaabt, ouni Referenz op speziell Plazen.

    Et war:
    Zil: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Aner Fonctiounen vun Ziler:

  • Optional Ënnerstëtzung fir arbiträr Nimm a Parameteren ze spezifizéieren:

    Zil all = : "Zil"

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

    Zil kompiléieren (Numm) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Zwee Startmodi: Maacht Modus fir Build Ziler mat Dateinumm ze passen (zum Beispill de Fichier "foo.o" entsprécht Zil "%name.o"), an den direkte Kompiléierungsmodus:

    Zil all = : Link

    Zillink =
    "target" : "foo.o", kompiléieren ("Bar") { ... }

    Zil kompiléieren (Numm) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Assemblée Taktike ginn duerch speziell Regelen festgeluegt, déi benotzt kënne ginn fir d'Noutwendegkeet ze bestëmmen fir e Montageziel erëm ze montéieren. Wann e Link op d'Präsenz vun engem Fichier gemaach gëtt, da gëtt dëst explizit duerch dat entspriechend Schëld festgeluegt ("Zil" fir de Regelnumm an *Fichier ("Zil") fir d'Datei ze kontrolléieren).

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

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

  • Den Entwéckler kann arbiträr Attributer vun der Assemblée Taktik definéieren. De "*Fichier" Fändel ass standard definéiert (@{...} weist d'Ënnerdréckung vum Output un, an "Ausgang 99" signaliséiert d'Noutwendegkeet fir nei opzebauen):

    taktik *Datei (Dateiname) = @{
    test -f % Dateinumm || eraus 99
    fir f an %

    Source: opennet.ru

Setzt e Commentaire