我对gmake有一个棘手的问题,当我从父目录构建时,有些东西是不同的并且make没有构建它需要的所有.o(s),但是如果我cd到目录并做了一个让它构建得很好。
如何让GNUmake告诉我这两次运行之间的区别?在父级中必须设置一些make变量来打破孩子,但我需要帮助找出如何跟踪它们。
答案 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>