Существует ли способ зарегистрировать команды, сделать, вызывает для компиляции программы? Я знаю о параметрах -n
и -p
, но они любой не разрешает если-условия, но просто распечатывает их. Или они не работают, когда существуют вызовы, чтобы 'сделать' себя в Make-файле.
Вы можете найти то, что ищете, в аннотированных журналах сборки, созданных SparkBuild .Сюда входят команды каждого правила, выполняемого в сборке, независимо от того, использовался ли символ «@» для предотвращения вывода команды make из командной строки.
Ваш комментарий об условиях if немного сбивает с толку: вы говорите о конструкциях оболочки или конструкциях make? Если вы имеете в виду конструкции оболочки, я не думаю, что у вас есть какой-либо способ получить именно то, что вам нужно, кроме как с помощью strace, как описано другими. Если вы имеете в виду конструкции make, то вывод, который вы видите , будет результатом разрешенного условного выражения.
Вы пробовали использовать параметр -d (отладка)?
Обратите внимание, что вместо этого вы можете контролировать количество информации с помощью --debug. Например, --debug = a (то же, что -d) или --debug = b, чтобы отображать только базовую информацию ...
Вы можете попытаться записать вызовы execve
с помощью strace
strace -f -e execve make ...
Make записывает каждую команду, которую он выполняет, в консоль, поэтому
make 2>&1 | tee build.log
создаст файл журнала с именем build.log
в качестве стороны эффект, который содержит то же самое, что написано на экране. ( man tee
для получения дополнительных сведений.)
2> & 1
объединяет стандартный вывод и ошибки в один поток. Если вы не включили это, обычный вывод попадал бы в файл журнала, а ошибки - только на консоль. ( make
записывает в stderr только тогда, когда команда возвращает код ошибки.)
Если вы хотите полностью подавить вывод в пользу записи в файл, это еще проще:
make 2>&1 > build.log
Потому что они просто захватывают консольный вывод они отлично работают с рекурсивным make
.
Это
make SHELL="sh -x"
заставит shell (который make вызывает для оценки конструкций shell) печатать информацию о том, что он делает, позволяя вам увидеть, как оцениваются любые условия в командах shell.