从命令行向makefile添加dynmaic调试信息

时间:2015-08-03 09:12:00

标签: makefile

如何从命令行添加动态调试信息?

例如,给定一个Makefile:

override MAKEFLAGS=r

ifeq ($(MAKELEVEL),0)

0::
    @$(MAKE)

else

1::
    @echo $(foo)

endif

我想从命令行定义,如下所示:

make foo='$@'

因此,它将回显正在执行的命令。

但是,我总是得到:

0

在递归制作中执行的目标是' 1 '。

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来执行此类操作。