Debugging 了解GNU为什么要重做特定文件

Debugging 了解GNU为什么要重做特定文件,debugging,makefile,gnu-make,Debugging,Makefile,Gnu Make,有没有办法询问GNU make为什么认为需要重新生成特定目标?使用make-d或make-debug=b(然后花一天的剩余时间查看输出!) 那会打印出来的 ... Prerequisite `foo.o' is newer than target `libfoo.a'. Must remake target `libfoo.a'. Invoking recipe from Makefile:516 to update target `libfoo.a'. ...

有没有办法询问GNU make为什么认为需要重新生成特定目标?

使用
make-d
make-debug=b
(然后花一天的剩余时间查看输出!)

那会打印出来的

...
       Prerequisite `foo.o' is newer than target `libfoo.a'.
      Must remake target `libfoo.a'.
  Invoking recipe from Makefile:516 to update target `libfoo.a'.
...

有关
--debug
开关的其他选项,请参见手册页。

如果您有足够新的GNU make,您可以使用
--trace
标志,该标志提供有关运行规则的原因以及规则在makefile中的定义位置的简明信息。这真的是唯一的方法吗?我担心这可能会发生,但我希望我可以绕过必须费力阅读
-d
选项的输出(不幸的是,我没有
--trace
).
--debug=b
的输出比
-d
小得多,您可以通过管道将输出传送到寻呼机,然后搜索您关心的目标。是否使用make的内置规则?如果您不这样做,那么您也可以通过使用
-Rr
(实际上只需要一个rs,但我永远记不起是哪一个)从
-d
获得一些速度和更简洁的输出。