После трёх лет разработки представлен релиз системы сборки GNU Make 4.0. Наиболее существенным новшеством является опциональная поддержка языка GNU Guile (одна из реализаций языка Scheme) для определения дополнительных функций в make-файлах. Проверить в скрипте поддержку Guile можно путём оценки наличия ключевого слова guile в переменной «.FEATURES». При наличии поддержки Guile, появляется возможность загрузки/определения Guile-скриптов с реализацией дополнительных функций и их использование в сценарии сборки.
Из других изменений отмечается:
- Новый оператор «!=» для вызова внешних shell-команд, выступающий в качестве альтернативы функции $(shell …) и реализованный для совместимости с BSD make. Например, вместо «var := $(shell echo *.c)» можно написать «var != echo *.c». Появление нового оператора может привести к нарушению обратной совместимости, так как присвоение значений переменным оканчивающимся на символ «!» теперь может интерпретироваться как вызов shell-команд. Чтобы избежать подобного поведения следует использовать пробел для явного отделения имени переменной («var! = value» вместо «var!= value»);
- Новый оператор присвоения «::=», определённый в стандарте POSIX 2012 и идентичный ранее доступному оператору «:=»;
- Новая функция $(file …) для организации записи в файл;
- Новая опция командной строки «—output-sync» («-O»), включающая режим группировки вывода по целям и рекурсивным вызовам make, что позволяет обеспечить наглядность вывода при сборке с распараллеливанием в несколько потоков (вывод разных экземпляров make не будет смешиваться);
- Реализация режима трассировки, активируемого через указание опции «—trace». При включении режима выводятся полные сведения о всех шагах сборки с указанием файла и номера строки. Данные выводятся даже, если указана переменная .SILENT или применён префикс «@»;
- В опцию «—debug» добавлена поддержка флага «n» (none) для принудительного отключения всех отладочных настроек;
- Сервер управления работами (jobserver), используемый для оптимизации выполнения параллельной сборки проектов в несколько потоков, адаптирован для работы на платформе Windows. Для Windows также обеспечена поддержка специальной сборочной цели .ONESHELL;
- Указание опций «-r» и «-R» в переменной MAKEFLAGS внутри make-файла теперь приводит к удалению всех встроенных правил и переменных.
