ProHoster > блог > интернет вести > Вработен во Red Hat го претстави системот за склопување на Goals. Објавување на GNU Make 4.2
Вработен во Red Hat го претстави системот за склопување на Goals. Објавување на GNU Make 4.2
Ричард В.М. Џонс, автор libguestfs, работејќи во Red Hat, воведено нова алатка за склопување Цели, насочена кон елиминирање на недостатоците и проблемите во полезноста на макета, додека ја одржува целокупната едноставност и разбирливост на скриптите. Услужната алатка make е дизајнирана во 1976 година и има голем број концептуални недостатоци; Целите планира да ги елиминира овие недостатоци без да го промени општиот концепт.
Изворниот код на цели дистрибуирани од лиценцирана според GPLv2+.
Поддршка за само една тактика за резолуција на зависност - „инструкцијата за склопување се извршува ако целната датотека недостасува или е постара од една од зависностите“. Целите планира да имплементира други тактики, како што се проверка за присуство на URL, споредување времиња на модификација со која било датотека, оценување на вградениот пакет во Коџи, споредба на контролните суми, водење тест случаи со селективно прескокнување на тестови.
Кога се обработуваат цели за изградба, make не ги одвојува датотеките и имињата на правилата, и како резултат на тоа, не се проверува дали при извршувањето на правилото, датотеката што тврди дека е создадена, всушност ќе биде креирана. На пример, ако имате правило наречено „тест“ кое извршува скрипти со тестови, случајно е создадена датотека со име „тест“, тогаш тестовите повеќе нема да се повикуваат, бидејќи make ќе смета дека целта е изградена и не бара кое било дејство (за да го решите проблемот во марка, можете да ја наведете директивата „.PHONY: тест“). Целите експлицитно ги одвојуваат датотеките и имињата на правилата.
Проблем со обезбедување само еден параметар за инструкции за склопување.
Целите ви овозможуваат да користите произволен број на именувани параметри. На пример, можете одделно да го извлечете знакот на датотека за отстранување грешки од името:
Проблеми во интеракција со преведувачот на школка. На пример, потребата да се контролира бегството на празни места во имињата на датотеките и директориумите, трошењето ресурси за лансирање на посебен преведувач на школка при извршување на секоја команда, двојното толкување на знакот „$“ (се користи и во школка и во марка), земајќи ги предвид вдлабнатините.
Овие проблеми се решаваат во Цели со користење на симболот „%“ наместо „$“ за склопувачките променливи („$“ останува само за школка), користејќи парсер LALR (1), што бара од вас да ги опкружувате патеките и имињата на датотеките со наводници и да ги истакнете кодните блокови со кадрави загради. Целиот команден блок се активира во еден пример од командната школка, а во рамките на блокот е дозволено произволно форматирање на кодот, без повикување на посебни празни места.
Два режими на стартување: режим на правење за усогласување на цели за градење со имиња на датотеки (на пример, датотеката „foo.o“ се совпаѓа со целта „%name.o“) и режим на директна компилација:
цел сите = : врска
врска за цел =
"target" : "foo.o", compile ("bar") { ... }
Тактиката на склопување се одредува со посебни правила што може да се користат за да се утврди потребата за повторно составување на целта на склопување. Ако се направи врска до присуството на датотека, тогаш тоа е експлицитно определено преку соодветниот знак („цел“ за името на правилото и *датотека („цел“) за проверка на датотеката).
Програмерот може да дефинира произволни атрибути на тактиките на склопување. Знамето „*датотека“ е стандардно дефинирано (@{...} означува потиснување на излезот, а „излез 99“ ја сигнализира потребата за обнова):
тактика *датотека (име на датотека) = @{
тест -f %име на датотека || излез 99
за f во %