如何在make中进行条件调试
How to do conditional debugging in make
我希望检测我的 makefile 以包含一些条件消息。我想要的一个简单示例如下所示:
ifdef DEBUG_XX
define info_xx
$$(info XX $(1))
endef
else
info_xx :=
endif
some_var := 1
$(info def:$(call info_xx, called: some_var:$(some_var)))
$(call info_xx,called: some_var:$(some_var))
all:
当且仅当定义了 DEBUG_XX
时,我的消息才会显示。不幸的是,上面会抛出一个错误:
make-lib> make -f test.mk DEBUG_XX=y
def:$(info XX called: some_var:1)
test.mk:11: *** missing separator. Stop.
它似乎在评估 $(info)
的输出,这对我来说意义不大……我错过了什么?
错误是由于"info"之前的双美元,这是一个错误:"define"/"endef"中的一行被保存为文字,仅在替换运算符。
但是,IMO,最好像这样重写你的代码:
info_xx=$(if $(DEBUG_XX),$(info XX ))
另请注意:
$(info def:$(call info_xx, called: some_var:$(some_var)))
将打印
XX called: some_var:1
def:
这是因为参数扩展(即 "call" 然后是第二个 "info")在第一个 "info" 有机会打印任何内容之前完成。
您可以使用 info_xx=$(if $(DEBUG_XX),XX )
修复它。但是纯$(call info_xx,called: some_var:$(some_var))
显然会导致错误。
我希望检测我的 makefile 以包含一些条件消息。我想要的一个简单示例如下所示:
ifdef DEBUG_XX
define info_xx
$$(info XX $(1))
endef
else
info_xx :=
endif
some_var := 1
$(info def:$(call info_xx, called: some_var:$(some_var)))
$(call info_xx,called: some_var:$(some_var))
all:
当且仅当定义了 DEBUG_XX
时,我的消息才会显示。不幸的是,上面会抛出一个错误:
make-lib> make -f test.mk DEBUG_XX=y
def:$(info XX called: some_var:1)
test.mk:11: *** missing separator. Stop.
它似乎在评估 $(info)
的输出,这对我来说意义不大……我错过了什么?
错误是由于"info"之前的双美元,这是一个错误:"define"/"endef"中的一行被保存为文字,仅在替换运算符。
但是,IMO,最好像这样重写你的代码:
info_xx=$(if $(DEBUG_XX),$(info XX ))
另请注意:
$(info def:$(call info_xx, called: some_var:$(some_var)))
将打印
XX called: some_var:1
def:
这是因为参数扩展(即 "call" 然后是第二个 "info")在第一个 "info" 有机会打印任何内容之前完成。
您可以使用 info_xx=$(if $(DEBUG_XX),XX )
修复它。但是纯$(call info_xx,called: some_var:$(some_var))
显然会导致错误。