调试未构建的目标的Makefile

时间:2011-09-14 08:10:45

标签: debugging makefile gnu-make

我需要一些帮助来调试Makefile系统。我有一个相当庞大的Makefile依赖树,实际上是Android源makefile系统。

在某些时候,由于文件丢失,构建失败:

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

文件mkfs.ubifs在make过程中应该是“build”,如果我这样做,它确实有效:

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

mkfs.ubifs正在构建,一切正常,直到我再次清理所有内容并从头开始构建。

这告诉我,某处缺少依赖。所以我的问题是,我该如何调试呢?如何准确发现缺少依赖项的目标?我可以为make提供哪些选项,这些选项将为我提供有关错误位置的线索?

任何其他建议也将不胜感激。谢谢。 :)

更新

使用make -d提供了相当多的输出。 完全如何确定从哪个make目标(源文件和行)和错误发生?

2 个答案:

答案 0 :(得分:6)

问题解决了。似乎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 :(得分:1)

目标的先决条件与其命令之间存在差异,即没有为目标指定依赖关系。我不认为您可以使用make进行调试,因为make无法告诉您缺少依赖项。

但是,您可以尝试使用make开关调用-d。这将告诉你它碰到丢失文件时尝试构建的目标。下一步是在makefile中找到该目标的规则,并添加缺少的依赖项。