En medarbejder fra Red Hat præsenterede bygningssystemet Goals. Udgave GNU Make 4.2

Richard Jones (Richard WM Jones), forfatter libguestfs, der arbejder for Red Hat, den et nyt byggeværktøj Mål, der har til formål at rette mangler og problemer i make-værktøjet, samtidig med at overordnet enkelhed og forståelighed i scripts bevares. Make-værktøjet blev designet i 1976 og har en række konceptuelle mangler, som skal udrettes i Goals, uden at ændre den overordnede idé.
Kildekoden til Goals distribueres under GPLv2+ licensen.

Problemer, der skal løses:

  • Understøttelse af kun én strategi for at håndtere afhængigheder — „byggeinstruktionen køres, hvis målfilen ikke findes, eller hvis den er ældre end en af afhængighederne“. I Goals planlægges det at implementere andre strategier, såsom at tjekke for URL'er, sammenligne ændringstidspunktet med enhver fil, evaluere pakken i Koji, sammenligne kontrolsummer, køre testpakker med selektiv udeladelse af tests.
  • Når man behandler byggeopgaver, skelner make-værktøjet ikke mellem filer og reglenavne, hvilket medfører, at der ikke er nogen kontrol for, om reglen faktisk vil skabe en fil, der er angivet. For eksempel, hvis der er en regel med navnet „test“, der kører scripts med tests, og der ved et uheld oprettes en fil med navnet „test“, vil testene stoppe med at blive kaldt, da make vil antage, at målet er bygget og ikke kræver nogen handlinger (for at omgå problemet i make kan man angive direktivet „.PHONY: test“). Goals skelner tydeligt mellem filer og reglenavne.

    En medarbejder fra Red Hat præsenterede bygningssystemet Goals. Udgave GNU Make 4.2
  • Problemet med at give kun én parameter til byggeinstruktioner.

    En medarbejder fra Red Hat præsenterede bygningssystemet Goals. Udgave GNU Make 4.2

    I Goals foreslås det at bruge et vilkårligt antal navngivne parametre. For eksempel kan man særskilt udtrække navnet som indikator for en debug-fil:

    En medarbejder fra Red Hat præsenterede bygningssystemet Goals. Udgave GNU Make 4.2
  • Problemer med interaktionen med shell-tolk. For eksempel nødvendigheden af at styre escape-tegn for mellemrum i fil- og mappenavne, ressourceforbruget ved at starte en separat shell-tolk ved udførelse af hver kommando, dobbelt fortolkning af tegnet „$“ (bruges både i shell og i make), og hensyntagen til indryk.

    De nævnte problemer løses i Goals ved at bruge tegnet „%“ i stedet for „$“ for byggevariablerne („$“ forbliver kun for shell), anvendelse af parseren LALR(1), der kræver at indramme stier og filnavne i citationstegn og indramme kodeblokke med krøllede parenteser. Hele blokken kører i et enkelt instans af kommandoskallen, og inden for blokken er vilkårlig kodeformatering tilladt, uden binding til specielle mellemrum.

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

    Er blevet:
    «target»: «foo.o», «bar.o» {
    LAGS < -o %@
    }

Andre funktioner af Goals:

  • Valgfri understøttelse af at angive vilkårlige navne og parametre:

    goal all = : «target»

    goal link =
    «target» : «foo.o», «bar.o» { … }

    goal compile (name) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • To kørselsindstillinger: make-tilstand for at matche byggetargets med filnavne (for eksempel filen «foo.o» svarer til målet «%name.o»), og direkte kompilationskørsel:

    goal all = : link

    goal link =
    «target» : «foo.o», compile («bar») { … }

    goal compile (name) =
    «%name.o» : «%name.c», «dep.h» { LAGS -c $^ -o $@ }

  • Byggetaktik bestemmes af særlige regler, som kan bestemme behovet for at genopbygge byggetargeten. Hvis der er knyttet en fil, defineres dette eksplicit gennem den tilsvarende indikator («target» for reglenavn og *file(«target») til filcheck).

    «target» : «foo.o», «bar.o» { … }

    *file(«target») : *file(«foo.o»), *file(«bar.o») { … }

  • Udvikleren kan definere vilkårlige indikatorer for byggetaktikker. Indikatoren «*file» er defineret som standard (@{…} angiver undertrykkelse af output, og «exit 99» indikerer behovet for genopbygning):

    tactic *file (filename) = @{
    test -f %filename || exit 99
    for f in %

    Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster