如何在make中进行条件调试

问题描述 投票:0回答:1

我正在尝试对我的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)的输出,这对我来说没有多大意义...我想念什么?

makefile gnu-make
1个回答
0
投票

错误是由于“ info”之前的双美元,这是一个错误:“ define” /“ endef”内的行被保存为文字,仅在替换运算符处才展开。

但是,IMO,最好这样重写代码:

info_xx=$(if $(DEBUG_XX),$(info XX $1))

还请注意:

$(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 $1)修复它。但是,然后纯$(call info_xx,called: some_var:$(some_var))显然会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.