如何捕获两个目录之间的GNUMake差异

时间:2010-06-16 01:25:49

标签: debugging gnu-make

我对gmake有一个棘手的问题,当我从父目录构建时,有些东西是不同的并且make没有构建它需要的所有.o(s),但是如果我cd到目录并做了一个让它构建得很好。

如何让GNUmake告诉我这两次运行之间的区别?在父级中必须设置一些make变量来打破孩子,但我需要帮助找出如何跟踪它们。

1 个答案:

答案 0 :(得分:1)

如果从父目录运行make无法构建foo.o,请尝试make foo.o。如果失败,那么尝试在两个目录中运行make -n foo.o(以打印命令而不是执行它们)以查看它在做什么不同。如果成功,那么当从父目录运行时,它甚至不会尝试构建foo.o; make -n可能会有所启发,作为最后的手段make -d将为您提供有关决策过程的大量信息,为什么它正在做它正在做的事情。

这是一个方便的技巧,可以看到变量的价值。将此规则放在makefile中:

show_%:
    @echo $@ is $($*)

现在您可以运行make show_FOO,它会告诉您变量FOO的值。

最后,您确定知道构建.o文件的位置吗? Make非常擅长使用那里构建文件 here ,但不是相反,所以如果你不小心,它可能会失去对中间文件的跟踪。 / p>