1

我对 gmake 有一个棘手的问题,当我从父目录构建时,有些不同,并且 make 不会构建它需要的所有 .o(s) 并且失败,但是如果我 cd 到目录并执行 make 它构建他们很好。

我怎样才能让 GNUmake 告诉我这两次运行之间的区别?必须在父级中设置一些 make 变量会破坏子级,但我需要帮助弄清楚如何追踪它们。

4

1 回答 1

1

如果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 非常擅长使用那里的东西此处构建文件,但反之则不然,因此如果您不小心,它可能会丢失中间文件的跟踪。

于 2010-06-16T21:36:25.550 回答