我需要一些帮助来调试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目标(源文件和行)和错误发生?
答案 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中找到该目标的规则,并添加缺少的依赖项。