ProHoster > Blog > notícias da internet > Um funcionário da Red Hat apresentou o sistema de montagem de Metas. Lançamento do GNU Make 4.2
Um funcionário da Red Hat apresentou o sistema de montagem de Metas. Lançamento do GNU Make 4.2
Ричард Джонс (Richard WM Jones), автор libguestfs, работающий в компании Red Hat, introduzido новую сборочную утилиту Objetivos, нацеленную на устранение недостатков и проблем в утилите make при сохранении общей простоты и понятности сценариев. Утилита make проектировалась в 1976 году и имеет ряд концептуальных недоработок, в Goals планируется устранить эти недоработки, не меняя общей концепции.
Исходный код Goals distribuído por licenciado sob GPLv2+.
Поддержка только одной тактики разрешения зависимостей — «сборочная инструкция запускается, если целевой файл отсутствует, или он старее одной из зависимостей». В Goals планируется реализовать и другие тактики, такие как проверка наличия URL, сравнение времени изменения с любым файлом, оценка сборки пакета в quem, сравнение контрольных сумм, запуск тестовых наборов с выборочным пропуском тестов.
При обработке сборочных целей утилита make не разделяет файлы и имена правил, и, как следствие, отсутствует проверка того, что при запуске правила действительно будет создан файл, создание которого заявлено. Например, если при наличии правила с именем «test», запускающего скрипты с тестами, случайно будет создан файл с именем «test», то тесты перестанут вызываться, так как make посчитает, что цель собрана и не требует выполнения каких-либо действий (для обхода проблемы в make можно указать директиву «.PHONY: test»). Goals явно разделяет файлы и имена правил.
Проблема с предоставлением только одного параметра для сборочных инструкций.
В Goals предлагается использовать произвольное число именованных параметров. Например, можно отдельно выделить из имени признак отладочного файла:
Проблемы взаимодействия с shell-интерпретатором. Например, необходимость контролировать экранирование пробелов в именах файлов и каталогов, трата ресурсов на запуск отдельного shell-интерпретатора при выполнении каждой команды, двойная трактовка символа «$» (используется как в shell, так и в make), учёт отступов.
Указанные проблемы решаются в Goals использованием символа «%» вместо «$» для сборочных переменных («$» остаётся только для shell), применением парсера LALR(1), требующего обрамлять пути и имена файлов кавычками и выделять фигурными скобками блоки с кодом. Весь блок команда запускается в одном экземпляре командной оболочки, а внутри блока допускается произвольное форматирование кода, без привязки к специальным пробелам.
Два режима запуска: режим make для сопоставления сборочных целей с именами файлов (например, файл «foo.o» соответствует цели «%name.o»), и режим прямого запуска компиляции:
Тактика сборки определяется специальными правилами, при помощи которых можно определять необходимость пересборки сборочной цели. Если осуществляется привязка к наличию файла, то это явно определяется через соответствующий признак («target» для имени правила и *file(«target») для проверки файла).
Разработчик может определять произвольные признаки сборочных тактик. Признак «*file» определён по умолчанию (@{…} указывает на подавление вывода, а «exit 99» сигнализирует о необходимости пересборки):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %