Как я могу проверить синтаксис для Make, но быть уверенным, что я не выполняюсь? - PullRequest
1 голос
/ 11 октября 2011

Мы работаем с файлами Make и хотим создать предварительную проверку в HG для проверки синтаксиса Makefile.Первоначально наша проверка только собиралась быть

make -n FOO.mk

Однако мы поняли, что, если Makefile был синтаксически корректным, но требовал установки некоторой переменной окружения, тест мог завершиться неудачей.

Любойидеи?По умолчанию мы прибегаем к написанию собственных сценариев Python для проверки ограниченного числа распространенных ошибок Makefile.

Мы используем GNUmake.

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Не рекомендуется, чтобы make-файлы зависели от переменных среды.Именно из-за упомянутой вами проблемы.

Переменные из среды:

... использование переменных из среды не рекомендуется.Для make-файлов нецелесообразно зависеть от их функционирования от переменных среды, установленных вне их контроля, так как это приведет к тому, что разные пользователи получат разные результаты из одного и того же make-файла.Это противоречит цели большинства make-файлов.

0 голосов
/ 12 марта 2014

Ссылки на переменную окружения в рецепте требуют префикса $$, так что не так сложно найти ссылки на шаблон '[$] [$] [{] или шаблон [$] [$] [AZ]который найдет прямые ссылки.Довольно простой Perl-фильтр (Sed-скрипт) находит их все.

Чтобы найти косвенные, я бы попробовал рецепт только с установленным PATH и HOME с / dev / null и SHELL с / bin / false,Макрос Make SHELL не является средой $ SHELL, поэтому вы можете запустить рецепты, для этого вам нужно установить SHELL = / bin / sh в файле рецептов, чтобы запустить команду из рецепта.Это должно вытряхнуть достаточно данных, чтобы помочь вам найти зависимости.

То, что вы делаете с результатами, является еще одной проблемой.

...