Hiji pagawe Red Hat dibere sistem assembly Goals. Ngaleupaskeun GNU Make 4.2

Richard WM Jones, panulis libguestfs, damel di Red Hat, ngenalkeun utiliti assembly anyar gol, aimed di ngaleungitkeun shortcomings jeung masalah dina utiliti nyieun bari ngajaga sakabéh kesederhanaan jeung understandability naskah. Utiliti make dirarancang dina taun 1976 sareng ngagaduhan sababaraha kakurangan konseptual; Tujuan ngarencanakeun pikeun ngaleungitkeun kakurangan ieu tanpa ngarobih konsép umum.
Kode sumber tujuan disebarkeun ku dilisensikeun dina GPLv2+.

Masalah pikeun direngsekeun:

  • Rojongan pikeun ngan ukur hiji taktik résolusi kagumantungan - "instruksi rakitan dijalankeun upami file targét leungit atanapi langkung lami tibatan salah sahiji dependensi." Goals ngarencanakeun pikeun nerapkeun taktik anu sanés, sapertos mariksa ayana URL, ngabandingkeun waktos modifikasi sareng file naon waé, ngevaluasi pakét ngawangun dina. koji, ngabandingkeun tina checksums, ngajalankeun kasus tés kalawan skipping selektif tina tés.
  • Nalika ngolah target ngawangun, make teu misahkeun file sareng nami aturan, sareng akibatna, henteu aya parios yén nalika ngajalankeun aturan, file anu diklaim didamel bakal leres-leres diciptakeun. Salaku conto, upami anjeun gaduh aturan anu disebut "test" anu ngajalankeun skrip kalayan tés, file anu namina "test" teu kahaja didamel, teras tés moal deui disebut, sabab make bakal nganggap yén udagan diwangun sareng henteu ngabutuhkeun. sagala aksi (pikeun Pikeun gawé di sabudeureun masalah dina make, anjeun bisa nangtukeun ".PHONY: test" diréktif). Tujuan sacara eksplisit misahkeun file sareng nami aturan.

    Hiji pagawe Red Hat dibere sistem assembly Goals. Ngaleupaskeun GNU Make 4.2

  • Masalah sareng nyadiakeun ngan hiji parameter pikeun parentah assembly.

    Hiji pagawe Red Hat dibere sistem assembly Goals. Ngaleupaskeun GNU Make 4.2

    Goals ngidinan Anjeun pikeun ngagunakeun jumlah sawenang parameter ngaranna. Contona, anjeun tiasa misah nimba tanda file debug tina nami:

    Hiji pagawe Red Hat dibere sistem assembly Goals. Ngaleupaskeun GNU Make 4.2

  • Masalah interaksi sareng juru cangkang. Contona, kabutuhan pikeun ngadalikeun escaping tina spasi dina ngaran file na diréktori, runtah sumberdaya on launching juru cangkang misah nalika executing unggal paréntah, interpretasi ganda tina "$" karakter (dipaké dina duanana cangkang jeung nyieun), nyokot kana akun indentations.

    Masalah ieu direngsekeun dina Goals ku ngagunakeun simbol "%" tinimbang "$" pikeun variabel assembly ("$" tetep ngan pikeun cangkang), ngagunakeun parser. LALR(1), anu ngabutuhkeun anjeun ngurilingan jalur sareng nami file nganggo tanda petik sareng nyorot blok kode nganggo kurung keriting. Sakabéh blok paréntah diluncurkeun dina hiji conto cangkang paréntah, sareng dina blok éta, pormat kode sawenang-wenang diidinan, tanpa ngarujuk kana rohangan khusus.

    Éta:
    sasaran: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

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

Fitur séjén Goals:

  • Pangrojong pilihan pikeun nangtukeun nami sareng parameter sawenang-wenang:

    tujuan sadayana =: "target"

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

    tujuan nyusun (ngaran) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Dua mode peluncuran: nyieun mode pikeun nyocogkeun ngawangun target kalawan ngaran file (contona, file "foo.o" cocog target "%name.o"), sarta mode kompilasi langsung:

    tujuan sadayana =: link

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

    tujuan nyusun (ngaran) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Taktik assembly ditangtukeun ku aturan husus nu bisa dipaké pikeun nangtukeun kudu reassemble target assembly. Upami aya tautan kana ayana file, maka ieu sacara eksplisit ditangtukeun ku tanda anu cocog ("target" kanggo nami aturan sareng *file ("target") pikeun mariksa file).

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

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

  • Pamekar bisa nangtukeun atribut sawenang taktik assembly. Bandéra "* file" diartikeun sacara standar (@{...} nunjukkeun suprési kaluaran, sareng "kaluar 99" nunjukkeun kabutuhan pikeun ngawangun deui):

    taktik *file (ngaran koropak) = @{
    test -f% Ngaran koropak || kaluar 99
    pikeun f dina%

    sumber: opennet.ru

Tambahkeun komentar