从命令行向makefile添加dynmaic调试信息
如何从命令行添加动态调试信息 例如,给定一个Makefile:从命令行向makefile添加dynmaic调试信息,makefile,Makefile,如何从命令行添加动态调试信息 例如,给定一个Makefile: override MAKEFLAGS=r ifeq ($(MAKELEVEL),0) 0:: @$(MAKE) else 1:: @echo $(foo) endif 我想从命令行定义如下: make foo='$@' 因此,它将响应正在执行的命令 但是,我总是得到: 0 其中递归生成中执行的目标为“1”。您可以在包含的生成文件中或在生成文件本身中执行以下操作: ifeq ("$(DEBUG)","1
override MAKEFLAGS=r
ifeq ($(MAKELEVEL),0)
0::
@$(MAKE)
else
1::
@echo $(foo)
endif
我想从命令行定义如下:
make foo='$@'
因此,它将响应正在执行的命令
但是,我总是得到:
0
其中递归生成中执行的目标为“1”。您可以在包含的生成文件中或在生成文件本身中执行以下操作:
ifeq ("$(DEBUG)","1")
D :=
DBGECHO = @echo
else
D := @
DBGECHO = @true
endif
然后,在makefile中,您可以有如下规则
foo: xxx
$(DBGECHO) "building $@"
$(D)$(MAKE) -C $@
如果执行makefoo
,则不会得到任何输出,但如果执行makefoodebug=1
,则会得到
building foo
make -C foo
通过变量将
$@
传递到makefile时,make会展开$(foo)
,但之后不会展开$(foo)的内容(它完成了替换)。您可以使用eval
执行类似操作。您可以在包含的生成文件中或在生成文件本身中执行以下操作:
ifeq ("$(DEBUG)","1")
D :=
DBGECHO = @echo
else
D := @
DBGECHO = @true
endif
然后,在makefile中,您可以有如下规则
foo: xxx
$(DBGECHO) "building $@"
$(D)$(MAKE) -C $@
如果执行makefoo
,则不会得到任何输出,但如果执行makefoodebug=1
,则会得到
building foo
make -C foo
通过变量将
$@
传递到makefile时,make会展开$(foo)
,但之后不会展开$(foo)的内容(它完成了替换)。您可以使用eval
来执行类似操作。在Make 3.81中,如果我删除override
指令,这项功能将起作用。我不知道为什么会有不同。在Make 3.81中,如果我删除override
指令,这项功能就会起作用。我不知道为什么会有不同。