Вработен во Red Hat го претстави системот за склопување на Goals. Објавување на GNU Make 4.2

Ричард В.М. Џонс, автор libguestfs, работејќи во Red Hat, воведено нова алатка за склопување Цели, насочена кон елиминирање на недостатоците и проблемите во полезноста на макета, додека ја одржува целокупната едноставност и разбирливост на скриптите. Услужната алатка make е дизајнирана во 1976 година и има голем број концептуални недостатоци; Целите планира да ги елиминира овие недостатоци без да го промени општиот концепт.
Изворниот код на цели дистрибуирани од лиценцирана според GPLv2+.

Решащи проблеми:

  • Поддршка за само една тактика за резолуција на зависност - „инструкцијата за склопување се извршува ако целната датотека недостасува или е постара од една од зависностите“. Целите планира да имплементира други тактики, како што се проверка за присуство на URL, споредување времиња на модификација со која било датотека, оценување на вградениот пакет во Коџи, споредба на контролните суми, водење тест случаи со селективно прескокнување на тестови.
  • Кога се обработуваат цели за изградба, make не ги одвојува датотеките и имињата на правилата, и како резултат на тоа, не се проверува дали при извршувањето на правилото, датотеката што тврди дека е создадена, всушност ќе биде креирана. На пример, ако имате правило наречено „тест“ кое извршува скрипти со тестови, случајно е создадена датотека со име „тест“, тогаш тестовите повеќе нема да се повикуваат, бидејќи make ќе смета дека целта е изградена и не бара кое било дејство (за да го решите проблемот во марка, можете да ја наведете директивата „.PHONY: тест“). Целите експлицитно ги одвојуваат датотеките и имињата на правилата.

    Вработен во Red Hat го претстави системот за склопување на Goals. Објавување на GNU Make 4.2

  • Проблем со обезбедување само еден параметар за инструкции за склопување.

    Вработен во Red Hat го претстави системот за склопување на Goals. Објавување на GNU Make 4.2

    Целите ви овозможуваат да користите произволен број на именувани параметри. На пример, можете одделно да го извлечете знакот на датотека за отстранување грешки од името:

    Вработен во Red Hat го претстави системот за склопување на Goals. Објавување на GNU Make 4.2

  • Проблеми во интеракција со преведувачот на школка. На пример, потребата да се контролира бегството на празни места во имињата на датотеките и директориумите, трошењето ресурси за лансирање на посебен преведувач на школка при извршување на секоја команда, двојното толкување на знакот „$“ (се користи и во школка и во марка), земајќи ги предвид вдлабнатините.

    Овие проблеми се решаваат во Цели со користење на симболот „%“ наместо „$“ за склопувачките променливи („$“ останува само за школка), користејќи парсер LALR (1), што бара од вас да ги опкружувате патеките и имињата на датотеките со наводници и да ги истакнете кодните блокови со кадрави загради. Целиот команден блок се активира во еден пример од командната школка, а во рамките на блокот е дозволено произволно форматирање на кодот, без повикување на посебни празни места.

    Беше:
    цел: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Стана:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Други карактеристики на Целите:

  • Изборна поддршка за одредување произволни имиња и параметри:

    цел сите = : "цел"

    врска за цел =
    "target" : "foo.o", "bar.o" { ... }

    компајлира цел (име) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Два режими на стартување: режим на правење за усогласување на цели за градење со имиња на датотеки (на пример, датотеката „foo.o“ се совпаѓа со целта „%name.o“) и режим на директна компилација:

    цел сите = : врска

    врска за цел =
    "target" : "foo.o", compile ("bar") { ... }

    компајлира цел (име) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Тактиката на склопување се одредува со посебни правила што може да се користат за да се утврди потребата за повторно составување на целта на склопување. Ако се направи врска до присуството на датотека, тогаш тоа е експлицитно определено преку соодветниот знак („цел“ за името на правилото и *датотека („цел“) за проверка на датотеката).

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

    *датотека ("цел") : *датотека ("foo.o"), *датотека ("bar.o") { ... }

  • Програмерот може да дефинира произволни атрибути на тактиките на склопување. Знамето „*датотека“ е стандардно дефинирано (@{...} означува потиснување на излезот, а „излез 99“ ја сигнализира потребата за обнова):

    тактика *датотека (име на датотека) = @{
    тест -f %име на датотека || излез 99
    за f во %

    Извор: opennet.ru

Додадете коментар