Подтвердить что ты не робот

Как отслеживать цели Makefile для устранения неполадок?

У нас есть длинный и сложный Makefile в нашей системе сборки. Есть ли хороший способ отслеживать, какие цели выполняются для заданного вызова?

4b9b3361

Ответ 1

Используйте make -d или make --debug[=flags] options:

‘-d’

Отпечатать отладочную информацию в дополнение к обычной обработке. В отладочной информации говорится, какие файлы рассматриваются для переделки, какие файлы-время сравниваются и с какими результатами, какие файлы на самом деле нужно переделать,, какие неявные правила рассматриваются и которые применяются - все Интересно, как решает, что делать. Параметр -d эквивалентен ‘--debug=a’ (см. Ниже).

‘--debug[=options]’

Отпечатать отладочную информацию в дополнение к обычной обработке. Можно выбрать различные уровни и типы вывода. Без аргументов напечатайте "базовый" уровень отладки. Возможные аргументы ниже; рассматривается только первый символ, а значения должны быть разделены запятыми или пробелами.

a (все) Все типы отладочного вывода включены. Это эквивалентно использованию '-d.

b (базовый) Основная отладка печатает каждую цель, которая была признана устаревшей, и была ли сборка успешной или нет.

v (verbose) Уровень выше ‘basic’; содержит сообщения о том, какие make файлы были проанализированы, предпосылки, которые не нужно перестраивать, и т.д. Этот параметр также позволяет отправлять сообщения ‘basic’.

i (неявный) Печатает сообщения, описывающие поиск неявного правила для каждой цели. Эта опция также позволяет отправлять сообщения ‘basic’.

j (задания) Распечатывает сообщения, содержащие сведения о вызове определенных подкоманд.

m (makefile) По умолчанию вышеуказанные сообщения не активируются при попытке переделать make файлы. Эта опция позволяет отправлять сообщения при восстановлении make файлов. Обратите внимание, что опция ‘all’ включает эту опцию. Эта опция также позволяет отправлять сообщения ‘basic’.

Другим вариантом является использование remake - исправленная версия GNU Make, которая добавляет улучшенные сообщения об ошибках, возможность отслеживать выполнение и отладчик.

Ответ 2

ElectricMake может генерировать XML-маркированную версию вашего журнала построения с большим количеством информации, которая поможет в этой ситуации:

  • Полные командные строки для всех команд, вызываемых во время сборки (даже те, которые были отмечены как "молчащие" команды с помощью модификатора @).
  • Происхождение (makefile и номер строки) вызываемых команд.
  • Время выполнения команд.
  • Зависимые отношения между целями в сборке.
  • Структурная взаимосвязь между целями и рекурсивными делает в сборке.
  • Файлы, считанные/записанные командами, вызванными в сборке.

Вот пример этого вывода:

<job id="J0824ab08" thread="5e72bb0" node="linbuild1-2" type="rule" name="../../i686_Linux/testmain/testmain.d" file="../config/rules.mak" line="109">
<command line="110">
<argv>echo Rebuilding '../../i686_Linux/testmain/testmain.d'</argv>
<output src="prog">Rebuilding ../../i686_Linux/testmain/testmain.d
</output>
</command>
<command line="111-114">
<argv>set -e; g++ -MM -w  -DUSE_PROFILING -DUSE_LOGGING -DHAVE_UNIX -DHAVE_LINUX -I.. testmain.cpp \
        | sed 's!\(testmain\)\.o[ :]*!../../i686_Linux/testmain/\1.o '../../i686_Linux/testmain/testmain.d' : !g' \
        &gt; '../../i686_Linux/testmain/testmain.d'; \
        [ -s '../../i686_Linux/testmain/testmain.d' ] || touch '../../i686_Linux/testmain/testmain.d'</argv>
</command>
<opList>
<op type="read" file="/home/ericm/src/testmain/testmain.cpp"/>
<op type="read" file="/home/ericm/src/minidumper/ExceptionReport.h"/>
<op type="read" file="/home/ericm/src/util/ECAssert.h"/>
<op type="create" file="/home/ericm/i686_Linux/ecloud/testmain/testmain.d" found="0"/>
</opList>
<timing invoked="1.919926" completed="3.600491" node="linbuild1-2"/>
<waitingJobs idList="J0824ae38"/>
</job>

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

Data Mining ElectricAccelerator Annotation показывает, как вы можете использовать аннотированный журнал построения для создания спецификаций для сборки.

ElectricMake - это GNU Make совместимый, поэтому он может обрабатывать make файлы, которые работают с GNU make.

Отказ от ответственности: я архитектор и ведущий разработчик ElectricAccelerator.