Отладка Makefile для цели, которая не собирается - PullRequest
2 голосов
/ 14 сентября 2011

Мне нужна помощь в отладке системы Makefile.У меня довольно большое дерево зависимостей Makefile, на самом деле система makefile исходного кода Android.

В какой-то момент сборка завершается неудачно из-за отсутствия файла:

/bin/bash: out/host/linux-x86/bin/mkfs.ubifs: No such file or directory

Файл mkfs.ubifs предполагаетсябыть "сборкой" во время процесса сборки, и, действительно, она работает, если я делаю:

make out/host/linux-x86/bin/mkfs.ubifs

mkfs.ubifs - это сборка, и все работает, пока я снова не очистлю все и не соберу с самого начала.

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

Любые другие предложения также будут оценены.Благодарю.:)

Обновление

Использование make -d обеспечивает довольно большой вывод.Как точно определить, из какого целевого объекта (исходный файл и строка) и произошла ошибка?

Ответы [ 2 ]

6 голосов
/ 14 сентября 2011

Проблема решена.Кажется, make -p был наиболее полезным способом отладки этой проблемы:

-p, --print-data-base
    Print  the data base (rules and variable values) that results from
    reading the makefiles; then execute as usual or as otherwise spec-
    ified.   This  also prints the version information given by the -v
    switch (see below).  To print the  data  base  without  trying  to
    remake any files, use make -p -f/dev/null.

Из этого вывода относительно легко определить, какая цель не достигла цели и какую зависимость следует включить.

1 голос
/ 14 сентября 2011

Существует несоответствие между предварительными условиями цели и ее командами, то есть для цели не указана зависимость.Я не думаю, что вы можете отладить, что использование make означает, что make не может сказать вам, что отсутствует зависимость.

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

...