开发者

Debugging Makefile for target that is not being built

I need some help debugging a Makefile system. I have a rather huge Makefile dependency tree, actually the Android source makefile system.

开发者_开发知识库

At some point the build fails because a file is missing:

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

The file mkfs.ubifs is supposed to be "build" during the make process, and indeed it works if I do:

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

The mkfs.ubifs is build, and everything is working, until I again clean everything and build from the beginning.

This indicates to me, that there is a missing dependency somewhere. So my question is, how do I go about debugging this? How do I discover exactly which target is missing a dependency? What options can I provide for make which will give me clues as to where the error is?

Any other suggestions will also be appreciated. Thanks. :)

Update

Using make -d provides quite a lot of output. How exactly do I determine from which make target (sourcefile and line) and error occurred?


Problem solved. It seems make -p was the most useful way to debug this problem:

-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.

From that output it is relatively easy to determine which target was failing, and what dependency that should be included.


There is a discrepancy between target's prerequisites and its commands, that is, a dependency is not specified for a target. I don't think you can debug that using make means because make can't tell you that a dependency is missing.

However, you can try invoking make with -d switch. That is going to tell you which target it tries to build when it hits the missing file. The next step would be to find the rule for that target in the makefile and add the missing dependency.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜