我对 gmake 有一个棘手的问题,当我从父目录构建时,有些不同,并且 make 不会构建它需要的所有 .o(s) 并且失败,但是如果我 cd 到目录并执行 make 它构建他们很好。
我怎样才能让 GNUmake 告诉我这两次运行之间的区别?必须在父级中设置一些 make 变量会破坏子级,但我需要帮助弄清楚如何追踪它们。
如果make
从父目录运行构建失败foo.o
,则尝试make foo.o
。如果失败,则尝试make -n foo.o
在两个目录中运行(打印命令而不是执行它们)以查看它的不同之处。foo.o
如果成功,那么从父目录运行时甚至不会尝试构建;make -n
可能会有所启发,作为最后的手段make -d
,会给你大量关于决策过程的信息,为什么它正在做它正在做的事情。
这是查看变量值的一个方便的技巧。将此规则放入您的生成文件中:
show_%:
@echo $@ is $($*)
现在你可以运行make show_FOO
了,它会告诉你变量的值FOO
。
最后,你确定你知道你在哪里构建你的 .o 文件吗?Make 非常擅长使用那里的东西在此处构建文件,但反之则不然,因此如果您不小心,它可能会丢失中间文件的跟踪。