如何从命令行添加动态调试信息?
例如,给定一个Makefile:
override MAKEFLAGS=r
ifeq ($(MAKELEVEL),0)
0::
@$(MAKE)
else
1::
@echo $(foo)
endif
我想从命令行定义,如下所示:
make foo='$@'
因此,它将回显正在执行的命令。
但是,我总是得到:
0
在递归制作中执行的目标是' 1 '。
答案 0 :(得分:0)
您可以在包含的makefile中或在makefile本身内执行以下操作:
ifeq ("$(DEBUG)","1")
D :=
DBGECHO = @echo
else
D := @
DBGECHO = @true
endif
然后,在你的makefile中,你可以有一个像
这样的规则foo: xxx
$(DBGECHO) "building $@"
$(D)$(MAKE) -C $@
如果您执行make foo
,则无法获得任何输出,但如果您执行make foo DEBUG=1
,那么您将获得
building foo
make -C foo
至于通过变量将$@
传递给makefile,make扩展$(foo)
,但之后不会扩展$(foo)的内容(它已完成替换)。您可以使用eval
来执行此类操作。