用于GNU make的Backtrace

有没有办法让GNU make打印导致命令在失败时执行的目标的“回溯”? 我经常处理严重混淆的makefile,同时解决在新系统上构建软件的可移植性问题,看起来这应该是一个非常简单的事情,make会大大有助于调试,但我找不到任何方式来请求它。 我想看到的是:

gcc: error: ... make[2]: error: gcc ... make[2]: error building target bar make[2]: error building dependency bar for target foo make[1]: error: make -C subdir make[1]: error building target subdir make[1]: error building dependency subdir for target all ... 

显示失败命令最终执行的整个依赖路径。

有没有办法做到这一点?

使用翻拍 。 它是GNU Make的修补版本,它增加了改进的错误报告,以易于理解的方式跟踪执行的能力以及调试器。

make -pmake -d提供了有趣的信息,但并不是你想要的。 请参阅make的手册页 。

是的, 翻拍可以给你一个回溯。 这是使用翻拍的Makefile显示的一个运行:

    翻拍--debugger Makefile
     GNU Make 4.1 + dbg0.91
    专为x86_64-unknown-linux-gnu而构建
    版权所有(C)1988-2014 Free Software Foundation,Inc。
    版权所有(C)2015 Rocky Bernstein。
    许可证GPLv3 +:GNU GPL版本3或更高版本 
    这是免费软件:您可以自由更改并重新分发它。
    在法律允许的范围内,不提供任何担保。
    阅读makefile ...
    更新makefile ....
     - >(/ src / github / remake / Makefile:608)
     Makefile:Makefile.in config.status
    翻拍<0> bt
     =>#0 Makefile at / src / github / remake / Makefile:608
    翻拍<1>
     - >(/ src / github / remake / Makefile:594)
     Makefile.in: 
    翻拍<2> bt
     =>#0 Makefile.in at / src / github / remake / Makefile:594
       #1 makefile在/ src / github / remake / Makefile:608
    重拍<3>
     - >(/ src / github / remake / Makefile:618)
     config.status:configure
    翻拍<4> bt
     =>#0 config.status at / src / github / remake / Makefile:618
       #1 makefile在/ src / github / remake / Makefile:608
    翻拍<5>
     - >(/ src / github / remake / Makefile:621)
    配置: 
    翻拍<6> bt
     = <#0在/ src / github / remake / Makefile配置:621
       #1 config.status at / src / github / remake / Makefile:618
       #2 Makefile在/ src / github / remake / Makefile:608
    重拍<7> 

您还可以在特定目标( break )设置断点,去那里( continue )并backtrace它。 如果出现错误,您将获得坠毁时您所处的位置的回溯。