Pegawe Red Hat nampilake sistem perakitan Goals. Rilis GNU Make 4.2

Richard WM Jones, penulis libguestfs, kerja ing Red Hat, ngenalake sarana perakitan anyar gol, ngarahke kanggo mbusak shortcomings lan masalah ing sarana nggawe nalika njaga gamblang sakabèhé lan understandability saka script. Utilitas make dirancang ing taun 1976 lan nduweni sawetara kekurangan konseptual Goals plans kanggo ngilangi kekurangan kasebut tanpa ngganti konsep umum.
Kode sumber gol disebarake dening dilisensi ing GPLv2+.

Masalah sing kudu ditanggulangi:

  • Dhukungan mung siji taktik resolusi dependensi - "instruksi perakitan ditindakake yen file target ilang utawa luwih lawas tinimbang salah sawijining dependensi." Goals ngrancang kanggo ngetrapake taktik liyane, kayata mriksa anane URL, mbandhingake wektu modifikasi karo file apa wae, ngevaluasi paket sing dibangun. koji, mbandhingake checksums, kasus tes sing mlaku kanthi tes skipping selektif.
  • Nalika ngolah target mbangun, nggawe ora misahake file lan jeneng aturan, lan minangka asil, ora ana priksa manawa nalika nglakokake aturan, file sing diklaim bakal digawe bakal bener-bener digawe. Contone, yen sampeyan duwe aturan sing disebut "test" sing nganggo skrip karo tes, file sing jenenge "test" ora sengaja digawe, banjur tes ora bakal disebut maneh, amarga make bakal nganggep yen target wis dibangun lan ora mbutuhake. tumindak sembarang (kanggo Kanggo ngatasi masalah ing make, sampeyan bisa nemtokake ".PHONY: test "direktif). Sasaran kanthi tegas misahake file lan jeneng aturan.

    Pegawe Red Hat nampilake sistem perakitan Goals. Rilis GNU Make 4.2

  • Masalah nyedhiyakake mung siji parameter kanggo instruksi perakitan.

    Pegawe Red Hat nampilake sistem perakitan Goals. Rilis GNU Make 4.2

    Sasaran ngidini sampeyan nggunakake jumlah parameter sing dijenengi kanthi sewenang-wenang. Contone, sampeyan bisa ngekstrak tandha file debug kanthi kapisah saka jeneng:

    Pegawe Red Hat nampilake sistem perakitan Goals. Rilis GNU Make 4.2

  • Masalah sesambungan karo juru cangkang. Contone, perlu kanggo ngontrol uwal saka spasi ing jeneng file lan direktori, sampah sumber daya nalika mbukak interpreter cangkang sing kapisah nalika nglakokake saben printah, interpretasi ganda saka karakter "$" (digunakake ing cangkang lan nggawe), njupuk menyang akun indentations.

    Masalah iki ditanggulangi ing Goals kanthi nggunakake simbol "%" tinimbang "$" kanggo variabel perakitan ("$" tetep mung kanggo cangkang), nggunakake parser. LALR(1), sing mbutuhake sampeyan ngubengi dalan lan jeneng berkas nganggo kuotasi lan nyorot blok kode nganggo kurung kriting. Blok printah kabeh diluncurake ing salah sawijining conto cangkang perintah, lan format kode sewenang-wenang diidini ing blok kasebut, tanpa ngrujuk menyang spasi khusus.

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

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

Fitur liyane saka Goals:

  • Dhukungan opsional kanggo nemtokake jeneng lan paramèter sewenang-wenang:

    gol kabeh =: "target"

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

    gol kompilasi (jeneng) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Rong mode peluncuran: mode gawe kanggo cocog karo target mbangun karo jeneng berkas (contone, file "foo.o" cocog karo target "%name.o"), lan mode kompilasi langsung:

    gol kabeh =: link

    link gol =
    "target" : "foo.o", kompilasi ("bar") {... }

    gol kompilasi (jeneng) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktik perakitan ditemtokake dening aturan khusus sing bisa digunakake kanggo nemtokake kabutuhan kanggo ngumpulake maneh target perakitan. Yen link digawe kanggo ngarsane file, iki ditetepake kanthi jelas liwat tandha sing cocog ("target" kanggo jeneng aturan lan *berkas ("target") kanggo mriksa file).

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

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

  • Pangembang bisa nemtokake atribut sembarang taktik perakitan. Gendéra "* file" ditetepake kanthi gawan (@{...} nuduhake penindasan output, lan "metu 99" menehi tandha yen perlu kanggo mbangun maneh):

    taktik *file (jeneng file) = @{
    test -f% jeneng berkas || uwal 99
    kanggo f ing%

    Source: opennet.ru

Add a comment