有没有办法让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
...
显示失败命令最终执行的完整依赖路径。
有没有办法做到这一点?
答案 0 :(得分:4)
使用remake。它是GNU Make的补丁版本,它增加了改进的错误报告,以易于理解的方式跟踪执行的能力以及调试器。
答案 1 :(得分:3)
make -p
和make -d
提供了有趣的信息,但并不完全是您所要求的。请参阅make's man page。
答案 2 :(得分:1)
是的,remake可以为您提供回溯。这是使用翻拍的Makefile显示的一个运行:
remake --debugger Makefile GNU Make 4.1+dbg0.91 Built for x86_64-unknown-linux-gnu Copyright (C) 1988-2014 Free Software Foundation, Inc. Copyright (C) 2015 Rocky Bernstein. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Reading makefiles... Updating makefiles.... -> (/src/github/remake/Makefile:608) Makefile: Makefile.in config.status remake<0> bt =>#0 Makefile at /src/github/remake/Makefile:608 remake<1> s -> (/src/github/remake/Makefile:594) Makefile.in: remake<2> bt =>#0 Makefile.in at /src/github/remake/Makefile:594 #1 Makefile at /src/github/remake/Makefile:608 remake<3> s -> (/src/github/remake/Makefile:618) config.status: configure remake<4> bt =>#0 config.status at /src/github/remake/Makefile:618 #1 Makefile at /src/github/remake/Makefile:608 remake<5> s -> (/src/github/remake/Makefile:621) configure: remake<6> bt =<#0 configure at /src/github/remake/Makefile:621 #1 config.status at /src/github/remake/Makefile:618 #2 Makefile at /src/github/remake/Makefile:608 remake<7>
您还可以在特定目标(break
)设置断点,然后转到那里(continue
)和backtrace
。如果出现错误,您将获得坠毁时您所处的位置的回溯。