pax*_*blo 98
make -d
Run Code Online (Sandbox Code Playgroud)
应该给你更多比足够的信息来调试你的makefile.
请注意:分析输出需要花费一些时间和精力,但是将输出加载到您喜欢的编辑器中并进行搜索会有很多帮助.
如果指定了您感兴趣的特定目标,则可以大大减少调试输出的数量.因此,如果您只对dodgy目标感兴趣,而不是只make -d对可能产生一百种不同的目标感兴趣,请尝试:
make clean
make -d dodgy
Run Code Online (Sandbox Code Playgroud)
(假设你clean当然有目标).
它make --debug是相同的,make -d但你也可以指定:
make --debug=FLAGS
Run Code Online (Sandbox Code Playgroud)
标志可以是:
a用于所有调试(与make -d和相同make --debug).b 用于基本调试.v 稍微冗长的基本调试.i 对于隐式规则.j 用于调用信息.m 在makefile重制期间获取信息.它看起来make --debug=b是您需要的最佳选择,如以下记录所示:
pax@paxbox> cat makefile
c:a b
touch c
pax@paxbox> touch a b ; make
touch c
pax@paxbox> make
make: 'c' is up to date.
pax@paxbox> touch a ; make --debug=b
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc. Blah, blah, blah.
Reading makefiles...
Updating goal targets....
Prerequisite 'a' is newer than target 'c'.
Must remake target 'c'.
touch c
Successfully remade target file 'c'.
Run Code Online (Sandbox Code Playgroud)
你的问题有点不清楚.如果要查看最近未修改的先决条件文件,请使用ls -l查看其修改时间.如果你想看看make是做什么的,试试这个:
# Make will announce when it is making this target, and why.
sometarget: preq1 preq2 preq3
@echo making $@
@echo The following preqs are newer than the target: $?
do_things
我通常做的不是像以前的回答者那样使用-d.
我要么:
下面是我用于打印输出值的一些代码:
define pv
$(info $(1) [$(origin $(1))] : >|$($(1))|<)
endef
define pva
$(foreach t,$(1),$(call pv,$(t)))
endef
define itemizer
$(foreach t,$($(1)),$(info $(t)))
endef
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75495 次 |
| 最近记录: |