Журнал вызванных команд make - PullRequest
8 голосов
/ 10 марта 2010

Есть ли способ записать команды, сделать вызовы для компиляции программы? Я знаю параметры -n и -p, но они либо не разрешают условия if, но просто распечатывают их. Или они не работают, когда есть вызовы, чтобы «сделать» себя в Makefile.

Ответы [ 5 ]

10 голосов
/ 20 июня 2010

Это

make SHELL="sh -x"

заставит оболочку (которая вызывает вызовы для оценки конструкций оболочки) напечатать информацию о том, что она делает, что позволит вам увидеть, как оцениваются любые условия в командах оболочки.

3 голосов
/ 10 марта 2010

Make записывает каждую команду, которую она выполняет, в консоль, поэтому

make 2>&1 | tee build.log

создаст файл журнала с именем build.log в качестве побочного эффекта, который содержит те же материалы, что и на экране. (man tee для более подробной информации.)

2>&1 объединяет стандартный вывод и ошибки в один поток. Если вы не включите это, обычный вывод будет идти в файл журнала, но ошибки будут идти только на консоль. (make пишет в stderr только тогда, когда команда возвращает код ошибки.)

Если вы хотите полностью отключить вывод в пользу записи в файл, это еще проще:

make 2>&1 > build.log

Поскольку они просто захватывают вывод консоли, они прекрасно работают с рекурсивной make.

2 голосов
/ 10 марта 2010

Вы можете попытаться записать execve звонки с strace

strace -f -e execve make ...
1 голос
/ 10 марта 2010

Вы можете найти то, что ищете, в аннотированных журналах сборки, созданных SparkBuild . Это включает в себя команды каждого правила, выполняемого в сборке, независимо от того, использовался ли «@» для предотвращения печати командной строки командой make.

Ваш комментарий об условиях if немного сбивает с толку: вы говорите о конструкциях оболочки или конструкциях? Если вы имеете в виду конструкции оболочки, я не думаю, что у вас есть какой-то способ получить именно то, что вам нужно, за исключением использования strace, как описано другими. Если вы имеете в виду make конструкции, то вывод, который вы видите , равен результату разрешенного условного выражения.

1 голос
/ 10 марта 2010

Вы пробовали с параметром -d (отладка)?

Обратите внимание, что вы можете контролировать количество информации с помощью --debug. Например, --debug = a (аналогично -d) или --debug = b для отображения только основной информации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...